다음과 같이 함수 타입을 타입 별칭과 함께 별도로 정의할 수 있습니다. 이를 함수 타입 표현식(Function Type Expression)이라고 부릅니다.
type Add = (a: number, b: number) => number;
const add: Add = (a, b) => a + b;
변수 add의 타입을 함수 타입 표현식으로 정의한 함수 타입으로 정의했습니다.
이렇게 함수 타입 표현식을 이용하면 함수 선언 및 구현 코드와 타입 선언을 분리할 수 있어 유용합니다.
Documentation - More on Functions
함수 타입 표현식은 다음과 같이 여러개의 함수가 동일한 타입을 갖는 경우에 요긴하게 사용됩니다.
const add = (a: number, b: number) => a + b;
const sub = (a: number, b: number) => a - b;
const multiply = (a: number, b: number) => a * b;
const divide = (a: number, b: number) => a / b;
위 코드를 함수 타입 표현식을 이용하면 다음과 같이 간결하게 만들 수 있습니다. 또 나중에 동일한 타입의 함수가 추가되어도 타입 주석을 이용해 타입 정의만 해주면 되어 매우 편리합니다.
type Operation = (a: number, b: number) => number;
const add: Operation = (a, b) => a + b;
const sub: Operation = (a, b) => a - b;
const multiply: Operation = (a, b) => a * b;
const divide: Operation = (a, b) => a / b;
함수 타입 표현식이 반드시 타입 별칭과 함께 사용되어야 하는 것은 아닙니다. 다음과 같이 그냥 함수 타입 표현식을 타입 주석에 사용해도 문제는 없습니다.
const add: (a: number, b: number) => number = (a, b) => a + b;