【发布时间】:2022-01-03 11:23:36
【问题描述】:
我尝试使用 (infer R)[] 为 never 和 any 类型解包数组。
type UnpackArrayType<T> = [T] extends [(infer R)[]] ? R : false;
但结果出乎意料:Typescript 既没有从“else”(非数组条件)强制转换为 false,也没有检测到推断的类型 R。
type UnpackArrayType<T> = [T] extends [(infer R)[]] ? R : false; // false type used as non-array-marker
type UA<T> = UnpackArrayType<T>; // just alias
type TypeTesting = {
"never": UA<never>, // unknown - incorrect
"never[]": UA<never[]>, // never - correct
"any": UA<any>, // unknown - incorrect
"any[]": UA<any[]>, // any - correct
"unknown": UA<unknown>, // false - correct
"unknown[]": UA<unknown[]>, // unknown - correct
"null": UA<null>, // false - correct
"null[]": UA<null[]>, // null - correct
"undefined": UA<undefined>, // false - correct
"undefined[]": UA<undefined[]>, // undefined - correct
"number": UA<number>, // false - correct
"number[]": UA<number[]>, // number - correct
}
为什么any 和never 类型解包为unknown?
【问题讨论】:
-
any和never都是任何其他类型的子类型,这就是为什么它们可以分配给任何其他值。因此,无论X是什么,问问题never extends X总是会返回true。 -
@TitianCernicova-Dragomir 期待您的回答,提供更多解释和示例
标签: typescript extends inferred-type