티스토리 뷰
조건부로 타입 만들기
1. 파라미터로 string을 넣으면 string, 아니면 unknown으로 만들기
type Age<T> = T extends string ? string : unknown; // 조건식은 extends 사용해야함
let a: Age<string>; // let a: string
let a2: Age<number>; // let a2: unknown
- ex) 그럼 파라미터로 array 자료를 입력하면 array의 첫 자료의 타입을 그대로 남겨주고,
array 자료가 아니라 다른걸 입력하면 any 타입을 남겨주는 타입은 어떻게 만들까?
type FirstItem<T> = T extends any[] ? T[0] : any;
let age1: FirstItem<string[]>;
let age2: FirstItem<number>;
infer 키워드
- 조건문에서 사용 가능
- 왼쪽에서 타입을 뽑아옴
type Person<T> = T extends infer R ? string : unknown; // T를 뽑아서 R에 담음
type a = Person<string>; // type a = string
- ex) array 내부의 타입만 뽑기
type 타입추출<T> = T extends (infer R)[] ? string : unknown;
type b = 타입추출<string[]>; // type b = string
- ex2) 함수를 넣으면 함수의 return 타입만 뽑기
type 함수타입추출<T> = T extends () => infer R ? R : unknown;
type c = 함수타입추출<() => void>; // type c = void
type c2 = ReturnType<() => void>; // type c2 = void
* 참고: ReturnType이라는 기본함수가 있음
---- 문제 ----
더보기
// 1. 타입 파라미터로
// - array 타입을 입력하면
// - array의 첫 자료가 string이면 string 타입을 그대로 남겨주고
// - array의 첫 자료가 string이 아니면 unknown 을 남겨주려면 어떻게 타입을 만들어놔야할까요?
/*
(동작예시)
let age3 :Age<[string, number]>;
let age4 :Age<[boolean, number]>;
*/
// 이러면 age1의 타입은 string, age2의 타입은 unknown이 되어야합니다. (array나 tuple이나 그게 그거임)
// 이걸 만족하는 type Age를 만들어봅시다.
type myAge<T> = T extends [string, ...any] ? T[0] : unknown;
let age3: myAge<[string, number]>; // let age3: string
let age4: myAge<[boolean, number]>; // let age4: unknown
// 2. 함수의 파라미터의 타입을 뽑아주는 기계를 만들어보십시오. 함수의 파라미터타입이 남아야합니다.
/*
타입뽑기<(x :number) => void> //이러면 number가 이 자리에 남음
타입뽑기<(x :string) => void> //이러면 string이 이 자리에 남음
*/
type 타입뽑기<T> = T extends (x: infer R) => any ? R : any;
type resultType = 타입뽑기<(x: number) => void>;
'Language > TypeScript' 카테고리의 다른 글
| [TypeScript] type mapping; keyof 연산자 (0) | 2023.07.11 |
|---|---|
| [TypeScript] object index signatures (0) | 2023.07.11 |
| [TypeScript] implements (0) | 2023.07.11 |
| [TypeScript] d.ts (0) | 2023.07.11 |
| [TypeScript] declare, ambient module (0) | 2023.07.11 |
댓글
