typescript通用元组错误rest元素

typescript通用元组错误rest元素,typescript,Typescript,Typescript给我一个通用元组rest元素的错误 type Tuple<Value extends any[]> = [...Value]; 不起作用 虽然这是有效的 type Tuple<Value extends any[]> = [...any[]]; type Tuple=[…any[]; TS4.0+的更新。TypeScript 4.0引入了对的支持,因此本问题中的代码应按编写的方式工作,而无需根据函数参数重写操作。万岁 TS3.9-答复: 你唯一缺

Typescript给我一个通用元组rest元素的错误

type Tuple<Value extends any[]> = [...Value];
不起作用

虽然这是有效的

type Tuple<Value extends any[]> = [...any[]];
type Tuple=[…any[];

TS4.0+的更新。TypeScript 4.0引入了对的支持,因此本问题中的代码应按编写的方式工作,而无需根据函数参数重写操作。万岁


TS3.9-答复:

你唯一缺少的就是这种推断。也许它会出现在TypeScript的未来版本中。幸运的是,仍然有一种方法可以实现您想要的功能,即用one-on表示所需的操作,因为从TypeScript 3.0开始,有一种方法可以在元组/数组类型和函数参数之间进行转换,并且您可以根据需要在参数类型上使用
推断

下面是
Tail
的一个可能实现:

type Tail<T extends any[]> = 
  ((...t: T) => void) extends ((x: any, ...u: infer U) => void) ? U : never;

type TestTail = Tail<[1,2,3,4]>; // [2,3,4]
我将把
Head
留给你,作为一种锻炼(当人们想让自己看起来聪明而不是懒惰时,他们会这么说)


无论如何,希望这能帮助你取得进步。祝你好运

你想在这里完成什么?
[…Value]
Value
有何不同?我试图创建一个Head和Tail泛型类型,但它们都不起作用,所以这应该可以起作用,为了让其余的都起作用,我将用我试图完成的内容进行更新您不能在类型上使用spread运算符。为什么?它在这里起作用
函数tuple(…arg:t){
@DenisFrezzato类型
[string,…number[]]
有效。谢谢,我想我可以做一些类似
类型Tuple=[Head,…Tail];类型Head=T扩展元组?H:从来没有;类型Tail=T扩展元组?R:从来没有,但是哦,很好
type Tuple<Value extends any[]> = [...any[]];
type Tail<T extends any[]> = 
  ((...t: T) => void) extends ((x: any, ...u: infer U) => void) ? U : never;

type TestTail = Tail<[1,2,3,4]>; // [2,3,4]
type Cons<H, T extends any[]> = 
  ((h: H, ...t: T) => void) extends ((...u: infer U) => void) ? U : never;

type TestCons = Cons<string, [number, boolean]>; // [string, number, boolean]