在Typescript中隐式创建元组

在Typescript中隐式创建元组,typescript,Typescript,有没有一种没有类型暗示的方法可以在Typescript中创建元组 如果我这么做的话 const tuple = [1, 2]; 元组的类型number[] 我能找到的最接近一艘邮轮的是 const tuple: [number, number] = [1, 2]; 是我遗漏了什么,还是这是唯一的方法?Typescript不会从数组文本推断元组类型。您可以显式地指定类型,正如您所做的那样,或者您可以创建一个helper函数,使它更容易一些,并且仍然可以得到一些推断 const tuple =

有没有一种没有类型暗示的方法可以在Typescript中创建元组

如果我这么做的话

const tuple = [1, 2];
元组的类型
number[]

我能找到的最接近一艘邮轮的是

const tuple: [number, number] = [1, 2];

是我遗漏了什么,还是这是唯一的方法?

Typescript不会从数组文本推断元组类型。您可以显式地指定类型,正如您所做的那样,或者您可以创建一个helper函数,使它更容易一些,并且仍然可以得到一些推断

const tuple = <T extends [any] | any[]>(args: T): T => args
tuple(["A", "B"]) // [string, string]
从3.0开始,您还可以使用rest参数中的元组来推断元组:

const tuple = <T extends any[]>(...args: T): T => args
tuple("A", "B") // [string, string]
const tuple=(…args:T):T=>args
元组(“A”,“B”)/[字符串,字符串]

使用typescript 3.0,您可以拥有自己的实用程序功能:

const tuple = <T extends any[]>(...args: T): T => args

从TypeScript 3.4开始,您可以简单地将
添加为const

const tuple = [1, 2] as const;

完全归功于的答案,它有一个更好的示例并链接到TS游乐场。

TypeScript 4.0还有一种隐式推断元组类型的方法:

类型
[…T]
,其中
T
是一个类似数组的类型参数,可以方便地用于指示对元组类型[:]的推断的偏好()

consttuple=(args:[…T]):T=>args
元组([“A”,“B”])/[字符串,字符串]

您的解决方案无法处理数组的任何间接更改,例如
tuple.push(123)
@Jay tuple本身就是一种类型,如果您声明
[number,number]
则只能在数组中推送number类型。将数组声明为元组的目的是限制已知一个或多个数组元素的类型。我知道的唯一方法是使用函数,这个答案最接近解决方案Wops,这意味着这里有一个很棒的答案@TitianCernicova Dragomir。关键是typescript不能推断元组:(请随意在这里添加这个作为答案,我可以接受,因为问题与我的不同。谢谢你提供的详细信息。希望将来至少我们可以使用它来避免显式声明许多元组functions@Jay我梦见各种各样的事物;)有没有一种方法可以执行返回可变元组的
as const
断言?类似于
[Number()]as MutableConst
的东西,它提供
[Number]
而不是
只读[Number]
只需离开此处,以防有人正在搜索
T extensed[any]| any[]
的官方文档。。。
const tup = tuple(1, 2) // tup type is [number, number]
const tuple = [1, 2] as const;
const tuple = <T extends unknown[]>(args: [...T]): T => args
tuple(["A", "B"]) // [string, string]