Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.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,我想创建一个类型,其条件基于never,但结果是意外的Typescript版本4.1.3 type TypeCond<T, U> = T extends never ? {a: U} : {b: U}; let test: TypeCond<never, number>; 我有一个TypeCond,它有一个简单的条件,如果T从不扩展 我希望测试变量的类型是{a:number},但实际上,该类型永远不会是 我不知道为什么。。。如果我用undefined或null替换ne

我想创建一个类型,其条件基于never,但结果是意外的Typescript版本4.1.3

type TypeCond<T, U> = T extends never ? {a: U} : {b: U};

let test: TypeCond<never, number>;
我有一个TypeCond,它有一个简单的条件,如果T从不扩展

我希望测试变量的类型是{a:number},但实际上,该类型永远不会是

我不知道为什么。。。如果我用undefined或null替换never,它将按预期工作。但我需要“从不”类型的条件


知道为什么测试得到的是从不类型而不是{a:number}吗?

我相信这是in-Typescript的结果。本质上,S|T扩展了A?B:C等于S和A?B:C | T扩展A?B:C,即条件类型分布在extends子句中的并集上。由于每种类型的T都等价于T | never,因此

T扩展A?B:C等于T |从不扩展A?B:C, 这又相当于T扩展了A?B:C |从不扩展A?B:C, 这与使用“从不扩展”联合的原始类型相同?B:C。 所以一个条件类型的表单永远不会扩展?B:C必须求值为“永不”,否则将违反分配属性

要使您的类型按预期工作,您可以使用以下技巧:

type TypeCond<T, U> = [T] extends [never] ? {a: U} : {b: U};

这避免了条件类型分布在T上,因为[T]不是裸类型参数。

我相信这是in-Typescript的结果。本质上,S|T扩展了A?B:C等于S和A?B:C | T扩展A?B:C,即条件类型分布在extends子句中的并集上。由于每种类型的T都等价于T | never,因此

T扩展A?B:C等于T |从不扩展A?B:C, 这又相当于T扩展了A?B:C |从不扩展A?B:C, 这与使用“从不扩展”联合的原始类型相同?B:C。 所以一个条件类型的表单永远不会扩展?B:C必须求值为“永不”,否则将违反分配属性

要使您的类型按预期工作,您可以使用以下技巧:

type TypeCond<T, U> = [T] extends [never] ? {a: U} : {b: U};

这避免了条件类型分布在T上,因为[T]不是裸类型参数。

很好的解释。它是由开发者调用的。很好的解释。它由开发人员调用。相关:相关: