반응형
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을 해결하기 위함
반응형
'✍ 공부 > TypeScript' 카테고리의 다른 글
[type-challenges] Unshift (0) | 2023.05.23 |
---|---|
[type-challenges] Push (0) | 2023.05.23 |
[type-challenges] If (0) | 2023.05.23 |
[type-challenges] Awaited (0) | 2023.05.23 |
[type-challenges] Exclude (0) | 2023.05.23 |