TypeScript - 함수형 타입

Seung min, Yoo·2021년 5월 7일
0
post-thumbnail

1. 타입스크립트는 함수의 매개변수에 타입어노테이션(annotation)기능이 있고, 이것을 작성해줘야 한다.

function add (x:number , y:number): number/*여기에 반환되는 값의 타입을 미리 정해줄 수 있다.*/ {
  return x + y;
}
add(1, 2); 

const result = add(1, 2);
//위와 같이 작성하게 되면 'result'는 number형 타입을 갖게 되는 것을 알 수 있다.

여기서 'add(1, 2)'에서 숫자가 아니라 문자형을 작성하게 되면 오류가 나게 되는 것이다.


2. 매개변수의 optional한 처리와 기본값

function buildUserInfo(name:string, email: string) {
  return {name: name, email}
}

//아무런 인자를 전달하지 않아도 함수가 사용되어져야 한다고 가정한다면
function buildUserInfo(name: string, email: string){
  return{name = '-', email = '-'}
} // es6에서 default parmeter이라고 매개변수에 아무런 값을 주지 않고 기본값을 줄 수 있다. 또한 문자열을 기본값으로 해줬기 때문에 'string'이라는 타입값이 필요가 없다.
const user = buildUserInfo();

//화살표 함수형에서의 annotation
const add = (a: number, b: number): number/*여기서 반환되어야 하는 값의 타입을 정해줄 수 있다.*/ => a + b;

return{name: name, email}부분을 보자면 name이라는 속성 키와 참조하는 매개변수명인 name은 scope에서 같은 이름으로 존재할 때 지워 줄 수 있다.
return{name, email}


3. 함수의 오버로딩

interface Storage {

}
interface ColdStorage {
  
}
function store (type: "통조림"): Storage
function store (type: "아이스크림"): ColdStorage 

일반적으로 자바와 같은 정적타입에서는 함수를 선언하게 되면 매개변수와 반환되는 값의 타입을 정하게 된다.

타입스크립트에서는 오버로드 시그니처를 정할 수 있게 해줘서 정적인 언어로 안정적이게 이용할 수 있게 해준다.

여기서 아래와 같이 함수와 함수명, 그리고 type과 반환값만 있고 바디가 없는 함수를 시그니쳐라고 한다.

interface Storage {
  a: string;
}
interface ColdStorage {
  b: string;
}

function store (type: "통조림"): Storage
function store (type: "아이스크림"): ColdStorage 

function store(type: "통조림" | "아이스크림") {
  if(type === "통조림") {
    return {a: "통조림" }
  }else if (type === "아이스크림") {
    return {b: "아이스크림"} 
  }else {
    throw new Error('Unsupported Type');
  }
}

const s = store('통조림');
s.a 

함수시그니쳐를 여러가지 이름으로 정리하는 것을 '오버로드 시그니쳐'라고 한다.

profile
이제 막 개발을 시작한 프로그래밍 입문자

0개의 댓글