Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.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,为什么在检查0-arity函数是否扩展1-arity类型时extends子句成功 有没有办法让第一张表格生效 对元组的检查和我预期的一样有效,因此我可以使用参数,但我很好奇为什么 函数foo(条:编号){ // ... } 函数baz(){ // ... } 类型Foo=类型Foo扩展(条:推断T)=>void?T:从来没有数字-预期数字 Baz类型=Baz扩展的类型(条:推断T)=>void?T:从来没有未知-期待永远不会 类型Foo2=参数扩展[推断T]?T:从来没有号码-好的 类型Baz2

为什么在检查0-arity函数是否扩展1-arity类型时extends子句成功

有没有办法让第一张表格生效

对元组的检查和我预期的一样有效,因此我可以使用
参数
,但我很好奇为什么

函数foo(条:编号){
// ...
}
函数baz(){
// ...
}
类型Foo=类型Foo扩展(条:推断T)=>void?T:从来没有数字-预期数字
Baz类型=Baz扩展的类型(条:推断T)=>void?T:从来没有未知-期待永远不会
类型Foo2=参数扩展[推断T]?T:从来没有号码-好的
类型Baz2=参数扩展[推断T]?T:从来没有永远不好

我自己也觉得这种行为很奇怪,但问题是TypeScript说更少的参数是更多参数的子类型。这意味着,
()=>void
扩展了
(x:number)=>void
,但反之亦然。TypeScript不知道type
Baz
中参数的值(因为
typeof Baz
中没有参数),所以它说
extends
子句为true,并将
t
设置为
unknown

另一方面,除非子类型元组的每个索引中的类型扩展了超类型元组中相应索引的值,否则元组类型不能真正相互扩展(即,
[number&string,number]确实扩展了[number,number]
)。这意味着当存在不同数量的参数时,
extends
子句总是返回false,并使第二个示例正常工作


这肯定很让人困惑,因此这里有一个。

相关的TypeScript常见问题解答条目: