"2개 문법, 1개 타입. Case 에 더 자연스럽게 읽히는 거 골라."
배열 타입 spelling 2가지
TypeScript 가 배열 타입에 동등한 2개 문법 지원: T[] (단축형) 과 Array<T> (generic 형태). 같은 타입 만들어 — 선택은 스타일.
const ages: number[] = [21, 18, 16]const ages: Array<number> = [21, 18, 16]
단축형이 단순 element 타입엔 자연스럽게 읽혀: `string[]`, `number[]`, `User[]`. Generic 형태는 element 타입 자체가 union 이나 복합이면 이기기 시작: Array<string | number> 가 괄호 잘못 읽기 쉬운 (string | number)[] 보다 자연스럽게 읽혀.
배열 literal 의 inference
TypeScript 가 default 로 배열 element 타입을 literal 에서 primitive parent 로 넓혀:
['hi', 'there']는string[]추론 (('hi' | 'there')[]아냐).[1, 2, 3]는number[]추론.[1, 'two']는(string | number)[]추론 — compiler 가 element 타입 union.
이 widening 이 보통 원하는 거. 좁은 inference 원하면 as const (5.4 lesson 에서 다룸) 나 명시적 tuple annotation 손 뻗어.
배열 연산이 타입 붙음
전체 Array prototype — map, filter, reduce, find, flat, 등 — 이 standard library 에 풍부한 타입 가짐. Compiler 가 체인 통해 element 타입 추적. `User[]` 의 users.filter(u => u.active).map(u => u.email) 가 자동으로 `string[]` 으로 끝나.
한 gotcha: callback 받는 method 는 inference 가 더 넓은 타입 고르면 generic 명시 필요할 수. Array.from(set) 가 보통 작동, 근데 복잡한 Iterable 모양엔 가끔 Array.from<T>(iter) 써.
T[] 선호, element 타입이 union 이나 복합 표현일 때 Array<T>. 파일 안에서 일관성 유지.다차원 배열
중첩 배열은 문법 쌓아. number[][] 가 숫자 배열의 배열. Array<Array<number>> 가 같은 거. 타입 가독성엔 단순 중첩엔 단축형이 보통 깨끗; 복잡한 중첩엔 type alias 빼낼 수.
피파의 고백
T[] 써. Array<T> 로 전환하는 한 자리 — T 가 tagged union 일 때 — Array<{ type: 'a'; payload: A } | { type: 'b'; payload: B }> 가 괄호 친 단축형보다 더 잘 읽혀. 그 외엔 단축형이 더 dense 하고 훑기 쉬워.