Open yunliuyan opened 1 year ago
在 TypeScript 中,never 是一个底类型(bottom type),表示不可达的类型,它没有任何值。因为 never 没有任何可能的实例,所以在类型系统中,never 被视为所有其他类型的子类型,即 never 可以分配给任何其他类型。
当我们使用条件类型进行类型判断时,如果条件判断的分支中存在 never 类型,那么无论条件是真还是假,最终的结果类型都将是 never。这是因为如果条件为真,那么 never 可以分配给任何其他类型,因此结果类型为 never;如果条件为假,那么分支中的代码将永远不会执行,结果类型也是 never。
在这个特定的条件类型 never extends never ? true : false 中,无论条件是真还是假,最终的结果类型都将是 never。这是因为 never 可以分配给 never,并且 never 也可以分配给 never,所以结果类型为 never。
所以可以换个思路,用数组裹起来
type IsNever<T> = [T] extends [never] ? true : false;
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
type IsNever<T> = [T] extends never[] ? true : false;
type A28 = 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
// https://github.com/microsoft/TypeScript/issues/31751
type IsNever<T> = [T] extends [never] ? true : false;
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
IsNever
Implement a type IsNever, which takes input type
T
. If the type of resolves tonever
, returntrue
, otherwisefalse
.For example:
Related Challenges