더북(TheBook)

구조분해 할당에서는 나머지 속성(rest property) 문법을 사용할 수 있습니다. 이 경우에도 타입스크립트는 타입을 알아서 추론합니다.

const [a, ...rest1] = ['hi', 1, 23, 456]; 
// const a: string;
// const rest1: [number, number, number]
// 명시적 타이핑
const [b, ...rest2]: [string, ...number[]] = ['hi', 1, 23, 456];
// const b: string;
// const rest2: [number, number, number]

또 하나의 특별한 표기가 있습니다.

let tuple: [number, boolean?, string?] = [1, false, 'hi'];
tuple = [3, true];
tuple = [5];
tuple = [7, 'no']; 
// Type 'string' is not assignable to type 'boolean | undefined'.

타입 뒤에 ? 가 붙어 있습니다. 이는 옵셔널(optional) 수식어로 해당 자리에 값이 있어도 그만, 없어도 그만이라는 의미입니다. [number, boolean?, string?][number] 또는 [number, boolean] 또는 [number, boolean, string]을 의미합니다. 마지막 줄의 에러는 [number, string]을 대입했기 때문입니다. 참고로 옵셔널 자리에는 undefined가 들어갈 수 있습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.