Type challenges를 풀이한 내용을 정리했습니다.
First of Array
- generic에 배열 타입을 넣으면 배열의 첫 번째 요소의 타입을 구현한다.
type arr1 = ['a', 'b', 'c']
type arr2 = [3, 2, 1]
type head1 = First<arr1> // expected to be 'a'
type head2 = First<arr2> // expected to be 3
solutions
type First<T extends any[]> = T extends [] ? never : T[0];
- generic 타입으로 입력 된 타입을 배열로 제한한다.
extends any[]
(Generic Constraints) - 빈 배열이 들어온 경우를 처리한다. T 유형에 [] 유형이 할당이 가능한지 체크한다
T extends []
Length of Tuple
- tuple을 generic으로 넣으면 길이를 타입으로 구현한다.
type tesla = ['tesla', 'model 3', 'model X', 'model Y']
type spaceX = ['FALCON 9', 'FALCON HEAVY', 'DRAGON', 'STARSHIP', 'HUMAN SPACEFLIGHT']
type teslaLength = Length<tesla> // expected 4
type spaceXLength = Length<spaceX> // expected 5
solutions
type Length<T extends readonly any[]> = T["length"];
- tuple 타입을 선언할 때 각 요소 자리에 다른 타입이 들어갈 수 없으므로 readonly를 수식해준다.
- 배열이 들어와야 하므로,
extends any[]
로 타입을 제한해준다. - T['length'] 로 타입의 길이를 가져올 수 있다.
Exclude
- Exclude Utility를 구현한다.
- generic으로 들어온 T 타입 중 U 타입을 제외한 타입을 구현한다.
solutions
type MyExclude<T, U> = T extends U ? never : T;
- 타입스크립트에서도 삼항연산자같이 생긴 걸 쓸 수 있다. (conditional Types)
condition ? trueExpression : falseExpression
extends
는 왼쪽 유형이 오른쪽에 있는 유형에 할당이 가능한 경우 trueExpression 타입이 할당된다.