이 글은 제가 타입챌린지를 하면서 해석한 내용을 적는 글입니다. 틀린 내용이 있으면 댓글 달아주시면 감사하겠습니다.
엥? 엄청쉽다. 1초만에 답이 나왔다.
해당 챌린지는 never이 제네릭으로 들어오면 true를 뱉고 아니면 false를 뱉는 타입이다.
이 포스팅을 봤다면... 진짜 1초만에 답이 나올것이다.
extends를 사용하는 타입을 분산 조건부 타입이라고 하는데,
분산 조건부 타입에서 never를 extends할 경우, 뒤의 코드를 거치지 않고 바로 never를 리턴해버리는 특징이 있다.
그래서 이를 해결하기 위해 배열을 씌워주는 작업을 한다.
type IsNever<T> = [T] extends [never] ? true : false;
/* _____________ Test Cases _____________ */
import type { Equal, Expect } from '@type-challenges/utils'
type cases = [
Expect<Equal<IsNever<never>, true>>,
Expect<Equal<IsNever<never | string>, false>>,
Expect<Equal<IsNever<''>, false>>,
Expect<Equal<IsNever<undefined>, false>>,
Expect<Equal<IsNever<null>, false>>,
Expect<Equal<IsNever<[]>, false>>,
Expect<Equal<IsNever<{}>, false>>,
]
진짜 거짓말 안하고 문제읽고 1초도 안되서 답이 나온거같다...
T extends never 로 하면 true : false 까지 가지않고 바로 never를 리턴하기 때문에...
[T] extends [never]로 코드를 수정하면 끝이다.
'Language > Typescript' 카테고리의 다른 글
타입챌린지 : 1130-ReplaceKeys (medium) (0) | 2023.04.22 |
---|---|
타입챌린지 : 1097-IsUnion (medium) (0) | 2023.04.21 |
타입챌린지 : 949-AnyOf (medium) (0) | 2023.04.18 |
타입챌린지 : 645-Diff (medium) (0) | 2023.04.17 |
타입챌린지 : 612-KebabCase (medium) (0) | 2023.04.16 |