조건문으로 타입만들기, infer
26 Apr 2023 | typeScript코딩애플강의를 보고 정리했습니다.
조건부로 타입만들기
자바스크립트 삼항연산자처럼 타입스크립트도 똑같이 할 수있다.
extends 키워드와 삼항연산자
를 이용하면된다.
extends는 왼쪽이 오른쪽의 성질을 가지고 있냐 라는 뜻이다.
Ex)
type Age<T> = T extends string ? string : unknown;
let age : Age<string> //age는 string 타입
let age2 : Age<number> //age는 unknown 타입
좀 더 심화로 이런식으로 array를 활용해서 타입에 조건문을 걸어줄 수 도있다.
type FirstItem<T> = T extends any[] ? T[0] : any
let age1 :FirstItem<string[]>; // string 타입이 됨
let age2 :FirstItem<number>; // any 타입이됨
infer 키워드
- 지금 입력한 타입을 변수로 만들어주는 키워드이다.
Ex)
type Person<T> = T extends infer R ? R : unknown;
type 새타입 = Person<string> // 새타입은 string 타입이다.
- infer 키워드는 조건문 안에서만 사용이 가능하다.
- infer 우측에 자유롭게 작명해주면 타입을 T에서 유추해서 R이라는 변수에 집어넣으라는 뜻이다.
- R을 조건식 안에서 마음대로 사용 가능하다.
등등, 이런식으로 타입파라미터에서 타입을 추출해서
쓰고 싶을 때 쓰는 키워드이다.
infer 키워드를 활용하는 예시를 더 알아보자.
- array 안에 있던 타입이 어떤 타입인지 뽑아서 변수로 만들어줄 수 있다.
type 타입추출<T> = T extends (infer R)[] ? R : unknown;
type NewType = 타입추출< boolean[] > // NewType 은 boolean 타입이다.
- 함수의 return 타입이 어떤 타입인지 뽑아서 변수로 만들어줄 수 있다.
type 타입추출<T> = T extends ( ()=> infer R ) ? R : unknown;
type NewType = 타입추출< () => number > // NewType은 number 타입이다.