有没有一种没有类型提示的方法可以在Typescript中创建一个元组。
如果我只是做
const tuple = [1, 2];
元组number[]
我最接近oneliner的是
const tuple: [number, number] = [1, 2];
我错过了什么,或者这是唯一的方法吗?
答案 0 :(得分:12)
使用打字稿3.0,您可以拥有自己的实用程序功能:
const tuple = <T extends any[]>(...args: T): T => args
并以这种方式使用它:
const tup = tuple(1, 2) // tup type is [number, number]
答案 1 :(得分:5)
Typescript不会从数组文字中推断出元组类型。你可以像你一样明确指定类型,或者你可以创建一个辅助函数来使它更容易并且仍然得到一些推断。
function tuple<T1, T2, T3, T4, T5>(data: [T1, T2, T3, T4, T5]) : typeof data
function tuple<T1, T2, T3, T4>(data: [T1, T2, T3, T4]) : typeof data
function tuple<T1, T2, T3>(data: [T1, T2, T3]) : typeof data
function tuple<T1, T2>(data: [T1, T2]) : typeof data
function tuple(data: Array<any>){
return data;
}
var t = tuple([1, '']);
修改强>
从3.4开始,您还可以使用as const
断言。这确实具有不需要额外功能但是它将生成只读元组的优点:
var t = [1, ''] as const;
t[0] = 1 //err
答案 2 :(得分:1)
TypeScript 4.0 还有一种隐式推断元组类型的方法:
<块引用>类型 [...T]
,其中 T
是一个类似数组的类型参数,可以方便地用于指示对元组类型推断的偏好[:] (docs)>
const tuple = <T extends unknown[]>(args: [...T]): T => args
tuple(["A", "B"]) // [string, string]
答案 3 :(得分:0)
从 TypeScript 3.4 开始,您可以在末尾简单地添加 as const
。
const tuple = [1, 2] as const;
完全感谢 @bela53 的回答,其中有一个更好的示例和指向 TS 游乐场的链接。