Typescript 检查';任何';类型
是否可以使用typescript条件检查确切的Typescript 检查';任何';类型,typescript,Typescript,是否可以使用typescript条件检查确切的任何类型 type IsAny<T> = T extends any ? true : never type A = IsAny<any> // true type B = IsAny<number> // never type C = IsAny<unknown> // never type D = IsAny<never> // never type IsAny=T扩展了什么?真的:
任何类型
type IsAny<T> = T extends any ? true : never
type A = IsAny<any> // true
type B = IsAny<number> // never
type C = IsAny<unknown> // never
type D = IsAny<never> // never
type IsAny=T扩展了什么?真的:从来没有
类型A=IsAny//true
类型B=IsAny//never
类型C=IsAny//never
类型D=IsAny//never
是的,您可以测试任何
:
type IfAny<T, Y, N> = 0 extends (1 & T) ? Y : N;
type IsAny<T> = IfAny<T, true, never>;
type A = IsAny<any> // true
type B = IsAny<number> // never
type C = IsAny<unknown> // never
type D = IsAny<never> // never
类型IfAny=0扩展(1&T)?Y:N;
类型IsAny=IfAny;
A型=IsAny。简而言之,any
是故意不健全的,并且违反了类型的正常规则。您可以检测到这种违规行为,因为它允许您执行一些疯狂的操作,如将0
分配给1
可能重复较简单的类型IfAny=T extends never?Y:N代码>似乎也有同样的效果。它看起来像是T extends never
分布在T
上,即使T
是never
,也不确定它是否是有意的。@artem这是有意的never
被视为“空联合体”,因此它是空的。有趣的是,any
没有被分发,这就是为什么IfAny
版本可以区分any
和never
。。。当然,它是通过返回never
而不是N
来实现的,这可能是不需要的。