이 글은 제가 타입챌린지를 하면서 해석한 내용을 적는 글입니다. 틀린 내용이 있으면 댓글 달아주시면 감사하겠습니다.
제네릭으로 들어오는 배열을 뒤집어서 리턴하는 타입이다.
간단하다.
type Push<T, U> = T extends any[] ? [...T, U] : never;
type Reverse<T extends any[], U extends any[] = []> =
T extends [...infer O, infer L] ? Reverse<O, Push<U, L>> : U;
/* _____________ Test Cases _____________ */
import type { Equal, Expect } from '@type-challenges/utils'
type cases = [
Expect<Equal<Reverse<[]>, []>>,
Expect<Equal<Reverse<['a', 'b']>, ['b', 'a']>>,
Expect<Equal<Reverse<['a', 'b', 'c']>, ['c', 'b', 'a']>>,
]
type errors = [
// @ts-expect-error
Reverse<'string'>,
// @ts-expect-error
Reverse<{ key: 'value' }>,
]
T extends [...infer O, infer L] ? : T에서 마지막 원소 L을 빼내서,
Reverse<O, Push<U, L>> : U : 재귀로 U라는 배열에 마지막 원소를 차례대로 push한다. 그리고 마지막에는 U를 리턴한다.
'Language > Typescript' 카테고리의 다른 글
타입챌린지 : 3243-FlattenDepth (medium) (0) | 2023.05.30 |
---|---|
타입챌린지 : 3196-Flip Arguments (medium) (0) | 2023.05.26 |
타입챌린지 : 3188-Tuple to Nested Object (medium) (0) | 2023.05.23 |
타입챌린지 : 3062-Shift (medium) (0) | 2023.05.22 |
타입챌린지 : 2946-ObjectEntries (medium) (0) | 2023.05.21 |