✍ 공부/TypeScript

[type-challenges] Concat

Po_tta_tt0 2023. 5. 23. 21:07
반응형

 

 

 

0. 문제

Javascript의 Array.concat 함수를 타입 시스템에서 구현하세요.

 

 

 

1. 설명

/* _____________ Your Code Here _____________ */

type Concat<T extends readonly unknown[], U extends readonly unknown[]> =  [...T , ...U]

/* _____________ Test Cases _____________ */
import type { Equal, Expect } from '@type-challenges/utils'

const tuple = [1] as const

type cases = [
  Expect<Equal<Concat<[], []>, []>>,
  Expect<Equal<Concat<[], [1]>, [1]>>,
  Expect<Equal<Concat<typeof tuple, typeof tuple>, [1, 1]>>,
  Expect<Equal<Concat<[1, 2], [3, 4]>, [1, 2, 3, 4]>>,
  Expect<Equal<Concat<['1', 2, '3'], [false, boolean, '4']>, ['1', 2, '3', false, boolean, '4']>>,
]

// @ts-expect-error
type error = Concat<null, undefined>

type Concat<T extends readonly unknown[], U extends readonly unknown[]> = [...T , ...U]
이와같이 T와 U Array<??>를 스프레드 연산으로 풀어주고,
T와 U는 readonly unknown[]을 extend해준다 : readonly가 들어가는 이유는 cases 3을 해결하기 위함

반응형