개념
조건부 타입에서 사용하는 기능으로, 컴파일러가 특정 타입을 추론하도록 도와주는 역할
infer를 이용해 타입 시스템 내에서 타입을 유추하고, 그 유추된 타입을 다른 타입 계산에 활용
기본 사용법
T extends U ? X : Y
`T`가 `U`를 상속하거나 extends 하면 타입 `X`를 사용하고, 그렇지 않으면 타입 `Y`를 사용.
이 패턴에서 `infer`를 사용하면 `T`의 일부 타입을 유추하고 이를 타입 시스템 내에서 사용 할 수 있다.
예제
type MD<T> = T extends (...args: any[]) => infer R ? R : any;
type D = MD<() => number> //type: number
type E = MD<string> //type: any
`MD`는 함수 타입 `T`의 반환 타입(return type)을 추론하는 타입. 만약 `T`가 함수가 아니라면 `infer R`을 사용하여 그 함수의 반환 타입을 `R`로 추론
응용: 튜플의 첫 번째 요소 추출
type First<T extends any[]> = T extends [infer U, ...any[]] ? U : never;
type A = First<[string, number, boolean]>; // string
type B = First<[number]>; // number
type C = First<[]>; // never
`T extends any[]`를 선언하여 항상 배열만 받겠다는 의미. `T`로 선언했더라면 다른 타입도 받을 수 있음.
T가 배열일 경우, 첫번째 요소에 `Infer U`를 걸어 `U`를 반환
배열이 아니거나, `infer U`를 반환 할 수 없다면 never로.
'IT > typescript' 카테고리의 다른 글
[typescript] -? 의미 (0) | 2024.12.05 |
---|---|
[typescript] fattenObject 함수 type 만들기 (0) | 2024.08.21 |
[typescript] 함수타입(Function Type) 인자형 (0) | 2024.08.14 |
[typescript] subtype (0) | 2024.08.14 |
[typescript] pnpm monorepo에서 paths 설정하기 (1) | 2024.07.15 |