typescript - conditional types
Conditional Types란 타입관계 검사로 표현된 조건에 따라 두 가지 가능한 타입 중 하나를 선택하여 입력과 출력 타입간의 관계를 설명하는데 도움을 줄 수 있습니다.
JavaScript의 삼항 연산자 조건문 condition ? trueExpression : falseExpression 과 비슷한 형태를 가집니다.
extends
를 기준으로 왼쪽 타입이 오른쪽 타입에 할당 될 수 있다면 첫 번째 타입 아닐 경우 두 번째 타입으로 지정됩니다.위에 작성한 createUser 함수는 입력 타입에 따라 다른 아웃풋이 반환되도록 작성이 되어 있습니다.
현재 3가지 케이스에 대해서만 작성이 되어 있지만 새로운 타입에 대한 정의가 들어가게 된다면 처리해야되는 케이스가 증가하게 되어 추가적으로 대응하는 함수를 작성해줘야 됩니다. 이런 작업을 매번 진행하는 것은 매우 귀찮고 번거로운 일 입니다.
이런 케이스들에 대해서 conditional types (조건부 타입)을 통해 다음과 같이 개선 할 수 있습니다.
typescript playground 를 통해 아래 코드를 실행해보실수 있습니다
condiitional types의 타입 추론
conditional types은
infer
키워드을 사용하여 타입 추론
를 하여 반환할 변수에 대해서 정의 할 수 있게 해줍니다. infer(추론)
키워드를 통해 더 쉽게 타입에 대하여 추론하고 conditional type을 더 유용하게 사용 할 수 있습니다. *주의:
extends
가 아닌 조건부 타입 extends
절에서만 사용 가능 → T extends infer U ? X : Y
위에서 infer 키워드를 활용하여 GetReturnType이라는 타입을 정의해보았습니다.
기본적으로 해석해보면
T
를 제네릭 인자로 받으며 T extends (infer R)[]
조건이 참일 경우 R[]
아닐 경우 다음 조건문을 체크하고 마지막 조건 역시 충족하지 못할 경우 T
를 타입으로 반환합나다.기타 사용 케이스
참고: