有没有一种没有类型提示的方法可以在Typescript中创建一个元组.
如果我只是这样做
const tuple = [1, 2];
Run Code Online (Sandbox Code Playgroud)
元组的类型 number[]
我最接近一个oneliner的是
const tuple: [number, number] = [1, 2];
Run Code Online (Sandbox Code Playgroud)
我错过了什么,或者这是唯一的方法吗?
Gui*_*ume 13
使用typescript 3.0,您可以拥有自己的实用程序功能:
const tuple = <T extends any[]>(...args: T): T => args
Run Code Online (Sandbox Code Playgroud)
并以这种方式使用它:
const tup = tuple(1, 2) // tup type is [number, number]
Run Code Online (Sandbox Code Playgroud)
从 TypeScript 3.4 开始,您可以简单地as const
在末尾添加。
const tuple = [1, 2] as const;
Run Code Online (Sandbox Code Playgroud)
完全归功于@bela53的回答,其中有一个更好的示例并链接到 TS 游乐场。
Typescript不会从数组文字中推断出元组类型。您可以根据需要显式指定类型,也可以创建一个辅助函数以使其变得更简单,并且仍然可以得出一些推断。
const tuple = <T extends [any] | any[]>(args: T): T => args
tuple(["A", "B"]) // [string, string]
Run Code Online (Sandbox Code Playgroud)
编辑
从3.4开始,您还可以使用as const
断言。这确实具有不需要额外功能的优点,但是它将生成一个只读元组:
var t = [1, ''] as const;
t[0] = 1 //err
Run Code Online (Sandbox Code Playgroud)
从3.0开始,您还可以在rest参数中起诉元组以推断元组:
const tuple = <T extends any[]>(...args: T): T => args
tuple("A", "B") // [string, string]
Run Code Online (Sandbox Code Playgroud)
TypeScript 4.0 有一种额外的方法来隐式推断元组类型:
type
[...T]
,其中T
是类似数组的类型参数,可以方便地用于指示对元组类型推断的偏好[:] ( docs )
const tuple = <T extends unknown[]>(args: [...T]): T => args
tuple(["A", "B"]) // [string, string]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1238 次 |
最近记录: |