"`infer` 가 pattern match 에서 타입 캡처. Compiler 가 모양 읽고 slot 묶음."
`infer` 가 뭐 함
`infer` 가 conditional 타입의 `extends` 절 안에서만 쓰이는 keyword. Match 되는 pattern 의 일부 캡처하는 타입 변수 선언. T extends Array<infer E> ? E : never 말함: "T 가 어떤 `Array
이게 타입-레벨 destructuring 버전. Pattern 쓰고, `infer X` 가 그 위치에 있던 거 캡처하는 binding.
Canonical 사용
배열의 element: type ElementOf<T> = T extends (infer E)[] ? E : never. 배열의 element 타입 추출.
함수의 return 타입: type ReturnOf<F> = F extends (...args: any[]) => infer R ? R : never. Standard library 의 `ReturnType` 이 정확히 이거.
Promise 된 타입: type Unwrap<T> = T extends Promise<infer V> ? V : T. Promise 에서 값 추출.
첫 argument: type FirstArg<F> = F extends (first: infer A, ...rest: any[]) => any ? A : never. 첫 parameter 타입 끄집어냄.
왜 `infer` 중요
`infer` 없으면, 타입의 모양 체크 가능 (`T extends Array
이게 타입-레벨 프로그래밍의 관문. 다른 타입에서 타입 추출 가능하면, 합성 가능, 변환 가능, 정교한 derived 타입 빌드 가능 — 다 runtime 작업 없이.