함수 타입 표현식
함수 타입 표현식 사용 ❌
const add = (a: number, b: number): number => a + b;
- 이 방식은 함수의 타입을 명시적으로 정의하지 않고, 함수 표현식을 그대로 사용한다.
- 그러나 복잡한 함수나 여러 함수에서 동일한 타입을 재사용할 때는 불편할 수 있다.
함수 타입 표현식 사용 ⭕
type Add = (a: number, b: number) => number;
const add: Add = (a, b) => 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;
const sub: (a: number, b: number) => number = (a, b) => a - b;
const multiply: (a: number, b: number) => number = (a, b) => a * b;
const divide: (a: number, b: number) => number = (a, b) => a / b;
- 타입 별칭 없이 함수 표현식만을 사용해 타입을 정의할 수 있다.
- 이 방법은 간단한 경우에 유용하지만, 코드 재사용이 필요한 경우 타입 별칭을 사용하는 것이 더 효과적이다.
호출 시그니처 (콜 시그니처)
type Operation2 = {
(a: number, b: number): number;
};
const add2: Operation2 = (a, b) => a + b;
const sub2: Operation2 = (a, b) => a - b;
const multiply2: Operation2 = (a, b) => a * b;
const divide2: Operation2 = (a, b) => a / b;
- 호출 시그니처는 타입 별칭을 객체 형태로 정의하는 방식이다.
- 이때, 함수는 객체의 프로퍼티처럼 정의된다.
- 이 방법은 객체 형태로 함수 타입을 정의하고, 호출 시 그 타입을 지정하는 데 유용하다.
- 호출 시그니처는 여러 개의 함수 타입을 객체 안에 묶을 때 사용될 수 있다.
- 예를 들어, 여러 함수들이 동일한 타입을 공유하는 경우,
Operation2와 같이 하나의 타입으로 묶어 관리할 수 있다.