함수 타입 설계

함수 입력과 반환 타입

선언 함수, 함수 표현식, 화살표 함수는 모두 같은 기준으로 읽힌다. 매개변수의 자리와 반환 타입을 계약으로 잡고, 선택 여부와 별칭은 그 계약을 더 잘 쓰기 위한 장치다.

시그니처를 먼저 읽기

function add(x: number, y: number): number
          

함수 이름보다 중요한 부분은 괄호 안의 매개변수 목록과 괄호 뒤의 반환 타입이다.

계약으로 재사용하기

type AddFunction =
  (a: number, b: number) => number
          

같은 입력과 출력을 가진 함수는 별칭으로 묶어 변수, 콜백, 반환값 위치에 반복 적용할 수 있다.

필수

반드시 전달

누락되면 호출 단계에서 오류가 나며, 내부 로직은 값이 있다고 믿는다.

선택

값 또는 undefined

이름 뒤 `?`가 붙으면 함수 내부에서 존재 여부를 확인해야 한다.

기본값

생략 시 대체

인자가 없거나 undefined이면 지정된 값으로 런타임 동작을 안정화한다.

나머지

마지막 배열

`...numbers: number[]`처럼 여러 인자를 하나의 배열 타입으로 모은다.

반환값 있음

본문 결과가 선언 타입과 맞아야 한다

`): number`로 선언한 함수가 문자열을 반환하면 호출하기 전 컴파일 단계에서 멈춘다.

반환값 없음

부수 효과 중심 함수는 void 표시

로그 출력, 화면 갱신처럼 돌려줄 값이 없는 함수는 `void`를 써서 호출자가 결과값을 기대하지 않게 만든다.

타입 별칭을 붙일 위치

함수 타입 별칭은 함수 자체의 모양을 이름으로 저장한다. 구현 방식이 달라도 같은 계약을 만족하는지 한 번에 확인할 수 있다.

변수

계산 함수 교체 가능

인자

콜백의 입력과 출력 고정

반환값

함수를 만들어 돌려줄 때도 계약 유지