题目描述
Implement a type IsNever, which takes input type T. If the type of resolves to never, return true, otherwise false.
For example:
type A = IsNever<never> // expected to be true
type B = IsNever<undefined> // expected to be false
type C = IsNever<null> // expected to be false
type D = IsNever<[]> // expected to be false
type E = IsNever<number> // expected to be false
题解
// ============= Test Cases =============
import type { Equal, Expect } from './test-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>>,
]
// ============= Your Code Here =============
type IsNever<T> = [T] extends [never] ? true : false
条件判断
type IsNever<T> = [T] extends [never] ? true : false
-
[T] extends [never]:检查T是否为never-
如果
T是never,则[T]是[never],条件成立,返回true -
如果
T不是never,则[T]不等于[never],条件不成立,返回false
-
为什么需要使用元组[T]?
直接比较T extends never会返回never,因为never是一个特殊类型,表示“没有值”。任何类型都不能赋值给never,所以T extends never会立即失败,返回never
使用元组[T]可以保留never的信息,使得条件类型能够正确地判断T是否为never