함수 타입 계약 흐름
함수 계약

함수 타입 계약

이름 있는 함수, 화살표 함수, 콜백은 모두 매개변수 목록과 반환 타입을 기준으로 비교된다. 타입 별칭이나 인터페이스는 그 계약에 이름을 붙여 재사용하게 해준다.

선언 함수

function add(a: number, b: number): number

함수 이름 옆에서 입력과 출력을 직접 고정한다.

화살표 함수

const add: Calc = (a, b) => a + b

변수 타입이 함수 본문에 문맥 타입을 제공한다.

콜백 함수

items.map((item): string => item.name)

호출하는 API가 콜백의 매개변수와 반환값을 요구한다.

1. 호출 위치 함수가 값처럼 전달될 자리의 기대 타입을 확인한다. let op: Calc
2. 매개변수 목록 이름보다 개수, 순서, 타입이 호환성의 기준이 된다. (a: number, b: number)
3. 반환 타입 본문이 돌려주는 값이 호출자가 기대한 타입과 맞아야 한다. => number
4. 별칭 재사용 같은 시그니처를 여러 함수와 콜백에 반복 적용한다. type Calc = (a: number, b: number) => number
할당 가능 매개변수와 반환 타입이 맞으면 선언 방식이 달라도 같은 함수 타입으로 취급된다.
문맥 추론 변수나 콜백 위치의 기대 타입이 함수 내부 매개변수 타입을 채운다.
차단되는 경우 반환 타입이 문자열인데 계약이 number이면 컴파일 단계에서 멈춘다.