Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 检查';任何';类型_Typescript - Fatal编程技术网

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扩展了什么?真的:

是否可以使用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扩展了什么?真的:从来没有
类型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
来实现的,这可能是不需要的。