이 글은 제가 타입챌린지를 하면서 해석한 내용을 적는 글입니다. 틀린 내용이 있으면 댓글 달아주시면 감사하겠습니다.
https://github.com/type-challenges/type-challenges/blob/main/questions/03057-easy-push/README.md
type Push<T extends any[], U> = [...T, U];
type Push<T, U> = T extends any[] ? [...T, U] ? never;
// test case
type cases = [
Expect<Equal<Push<[], 1>, [1]>>,
Expect<Equal<Push<[1, 2], '3'>, [1, 2, '3']>>,
Expect<Equal<Push<['1', 2, '3'], boolean>, ['1', 2, '3', boolean]>>,
]
정말 간단하다. 위의 두 답 외에도 다양한 답변들이 있으니 issue를 잘 살펴보자.
type Push : Push라는 타입을 정의한다.
<T extends any[], U> = [...T, U]; : 뒤에서 전개연산자를 사용하기 위해 T가 배열이라고 선언해주고, 전개 연산자를 사용해 배열 안에서 T를 전개하고 마지막에 U를 넣어준 값을 리턴하면 끝!
T extends any[] ? [...T, U] ? never; : T가 배열이라면 [...T, U]를 리턴하고 아니라면 never을 리턴한다. 뒤에가 꼭 never일 필요는 없다. 에러 조건에 따라 never를 다른 타입들로 바꾸어도 상관없다.
'Language > Typescript' 카테고리의 다른 글
타입챌린지 : 3312-Parameters (easy) (0) | 2023.03.06 |
---|---|
타입챌린지 : 3060-Unshift (easy) (0) | 2023.03.06 |
타입챌린지 : Equal - 번외 (0) | 2023.03.06 |
타입챌린지 : 898-Includes (easy) (0) | 2023.03.05 |
타입챌린지 : 533-Concat (easy) (0) | 2023.03.04 |