extends
를 사용하여 조건식을 만들어봅시다.
👇파라미터
type Age<T> = T;
let 나이 :Age<string> //나이 변수는 string 타입됨.
------------------------------------------
파라미터로 string을 집어넣으면 strig 남겨주시고
그게 아니면 unknown으로 해주세요
type New<T> = T extends string ? string: unknown
extends👉T라는 type이 string 속성을 가지고 있나요?
let a :New<string>
예제 -
파라미터로 array 자료를 입력하면 array의 첫 자료의 타입을 그대로 남겨주고, array 자료가 아니라 다른걸 입력하면 any 타입을 남겨주는 타입은 어떻게 만들면 될까요?
let age1 :FirstItem<string[]>;
let age2 :FirstItem<number>;
이러면 age1의 타입은 string, age2의 타입은 any가 되어야합니다.
답:
type FirstItem<T> = T extends any[] ? T[0] : any
조건문에서 쓸 수 있는 infer
키워드
타입을 왼쪽에서 뽑아줍니다.
type Person<T> = T extends infer R ? R : unknown;
👉 왼쪽(T)에서 타입 뽑아서 R 변수에 담아주세요
type 새타입 = Person<string> // 새타입은 string 타입입니다
👉 T -> boolean[]
type 타입추출<T> = T extends (infer R)[] ? R : unknown;
👉 R -> Boolean
type NewType = 타입추출< boolean[] >
// NewType 은 boolean 타입입니다
const ff: NewType = false;
함수를 넣으면 함수의 return 타입만 뽑고싶다면
type 타입추출<T> = T extends ( ()=> infer R ) ? R : unknown;
👉 T -> ()=>void , R -> void
type NewType = 타입추출< () => void > // NewType은 void 타입입니다
---------------------------
예약어가 있어요.
type b = ReturnType<()=>void>
b는 void