타입을 선언할 때 함수도 선언할 수 있다.
map 함수의 콜백함수를 runner 함수의 파라미터로 받아오게 하고 싶다고 가정하자.
const runner = () => {
return ['태연', '윤아', '티파니'].map((x) => `소녀시대 멤버: ${x}`);
};
console.log(runner());
type Mapper = (x: string) => string; // string을 받고, string을 반환
Mapper라는 새로운 타입을 만들어서
const runner2 = (callback: Mapper) => {
return ['태연', '윤아', '티파니'].map(callback);
};
console.log(runner2((x) => `소녀시대 멤버: ${x}`));
매개변수에 함수를 넣어줘서 이 함수의 타입을 정의할 수 있다.
type MultiplyTwoNumbers = (x: number, y: number) => number;
const multiplyTwoNumbers: MultiplyTwoNumbers = (x, y) => {
return x + y;
};
매개변수가 아닌 함수 이름에서 타입을 선언하는 게 개인적으로 더 깔끔하고, 보기 좋은 것 같다.
이전까지는 type 키워드만 이용한 타입 선언에 대해 알아보았다. 이번엔 interface 키워드를 이용한 선언 방법을 알아보자.
interface MultiplyNumbers {
(x: number, y: number): number;
}
const multiplyTwoNumbers3: MultiplyNumbers = (x, y) => {
return x * y;
};
객체 타입을 선언할 때는 프로퍼티를 넣었지만, 함수에서는 함수의 매개변수와 반환값에 대한 타입을 적어주면 된다. 콜론(:)을 쓰는 것에 주의하자.