"`infer` + conditional + mapped 타입이 전체 toolkit. 그것들 compose 할 시간."
이미 아는 거
트랙 8 에서: `infer` 가 conditional pattern 안에서 타입 변수 선언. T extends (infer R)[] ? R : T 가 T 가 배열이면 element 타입 추출. 4개 canonical 패턴 다뤘어: element-of-array, return-of-function, unwrap-promise, first-argument.
이 lesson 이 더 나아가: `infer` 를 mapped 타입, template literal 타입, 재귀 패턴과 결합. 이게 만나게 될 대부분 library 타입 정의 뒤의 기법.
한 pattern 의 여러 infer
같은 pattern 에 여러 infer 변수 선언 가능. T extends [infer A, infer B, ...infer Rest] ? [A, B, Rest] : never 가 tuple 을 첫 두 element 와 나머지로 destructure. 각 infer 가 다른 조각 캡처.
재귀 타입 추출
Conditional 타입이 재귀 가능. type Flatten<T> = T extends (infer E)[] ? Flatten<E> : T 가 배열 재귀적으로 unwrap. Flatten 가 `string` 로 평가. 재귀가 실제 중첩 깊이로 bound — T 가 더 이상 배열 아닐 때 재귀 멈추고 T 반환.
Template literal pattern matching
`infer` 를 template literal 타입과 결합하면 string pattern-match 가능. T extends `${infer A}-${infer B}` ? [A, B] : never 가 'pippa-quest' 를 `['pippa', 'quest']` 로 split. infer 가 literal token 사이 부분 캡처.