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
Arrays Typescript`custom type`只在类型世界中工作,但实际上不使用`function`_Arrays_Typescript_Tuples_Type Inference_Tail - Fatal编程技术网

Arrays Typescript`custom type`只在类型世界中工作,但实际上不使用`function`

Arrays Typescript`custom type`只在类型世界中工作,但实际上不使用`function`,arrays,typescript,tuples,type-inference,tail,Arrays,Typescript,Tuples,Type Inference,Tail,我有一个名为的自定义类型,它将返回不带第一个元素的数组类型: 类型尾部= ((…t:t)=>any)扩展((…any,…tail:infertt)=>any) ? TT : [] 类型test11=Tail/[2,字符串,数字] 上面的代码工作正常,但与函数一起使用时,它现在不工作: 函数尾部(arr:T):尾部{ 返回arr.slice(1)作为尾部; } 让结果=尾部(['',1]);//res:(字符串|数字)[] 结果应仅为数字,但它会显示(字符串|数字)[,原因是什么?请参见。具

我有一个名为的自定义类型,它将返回不带第一个元素的数组类型:

类型尾部=
((…t:t)=>any)扩展((…any,…tail:infertt)=>any)
? TT
: []
类型test11=Tail/[2,字符串,数字]
上面的代码工作正常,但与函数一起使用时,它现在不工作:

函数尾部(arr:T):尾部{
返回arr.slice(1)作为尾部;
}
让结果=尾部(['',1]);//res:(字符串|数字)[]

结果
应仅为
数字
,但它会显示
(字符串|数字)[
,原因是什么?

请参见。具体来说,它说:

规则[给定]意味着数组文字总是数组类型,除非它是由类似元组类型的上下文类型

在对
tail
的调用中,对
['',1]
类型的唯一提示是
any[]
。(参见第4.15.2节。我浏览了它,它似乎是这么说的,但是如果我错了,有人可以叫我出来。)因此,它的类型变成
(string | number)[]
,你用签名调用
tail

tail<(string | number)[]>(arr: (string | number)[]): (string | number)[]
你会看到它消失在

let i: [string, number] = ['5', 5]
let x = tail(i) // x: [number] (inferred)
我相信在这种情况下,根本无法推断元组类型。但是,这应该没问题,因为您不应该经常将文本传递到
tail

let i: [string, number] = ['5', 5]
let x = tail(i) // x: [number] (inferred)