我有一个形式为:[1,"message"]的数组。

如何在TypeScript中定义呢?


当前回答

TypeScript 3.9+更新(2020年5月12日)

现在,TypeScript也支持命名元组。这大大增加了代码的可理解性和可维护性。查看官方TS游乐场。


所以,现在不再是未命名的:

const a: [number, string] = [ 1, "message" ];

我们可以添加名字:

const b: [id: number, message: string] = [ 1, "message" ];

注意:您需要一次添加所有的名称,不能省略一些名称,例如:

type tIncorrect = [id: number, string]; // INCORRECT, 2nd element has no name, compile-time error.
type tCorrect = [id: number, msg: string]; // CORRECT, all have a names.

提示:如果你不确定最后一个元素的计数,你可以这样写:

type t = [msg: string, ...indexes: number];// means first element is a message and there are unknown number of indexes.

打印稿4。x+可变元组类型

TS 4.x的最后一个例子必须更改为这个:

type t = [msg: string, ...indexes: number[]];// means first element is a message and there are unknown number of indexes.

类型number更改为number[]。

更多信息请访问:https://www.typescriptlang.org/docs/handbook/release-notes/typescript-4-0.html#variadic-tuple-types

其他回答

我已经确定了以下格式,用于输入可以具有多种类型项的数组。

阵列望远镜< ItemType1 | ItemType2 | ItemType3 >

这可以很好地用于测试和类型保护。https://www.typescriptlang.org/docs/handbook/advanced-types.html#type-guards-and-differentiating-types

这种格式不适用于测试或类型保护:

(ItemType1 | ItemType2 | ItemType3) []

我使用这个版本:

exampleArr: Array<{ id: number, msg: string}> = [
   { id: 1, msg: 'message'},
   { id: 2, msg: 'message2'}
 ]

这和其他建议有点相似,但仍然很容易记住。

TypeScript 3.9+更新(2020年5月12日)

现在,TypeScript也支持命名元组。这大大增加了代码的可理解性和可维护性。查看官方TS游乐场。


所以,现在不再是未命名的:

const a: [number, string] = [ 1, "message" ];

我们可以添加名字:

const b: [id: number, message: string] = [ 1, "message" ];

注意:您需要一次添加所有的名称,不能省略一些名称,例如:

type tIncorrect = [id: number, string]; // INCORRECT, 2nd element has no name, compile-time error.
type tCorrect = [id: number, msg: string]; // CORRECT, all have a names.

提示:如果你不确定最后一个元素的计数,你可以这样写:

type t = [msg: string, ...indexes: number];// means first element is a message and there are unknown number of indexes.

打印稿4。x+可变元组类型

TS 4.x的最后一个例子必须更改为这个:

type t = [msg: string, ...indexes: number[]];// means first element is a message and there are unknown number of indexes.

类型number更改为number[]。

更多信息请访问:https://www.typescriptlang.org/docs/handbook/release-notes/typescript-4-0.html#variadic-tuple-types

如果在一个对象中处理具有多个值类型的数组,这对我来说是有效的。

 { [key: string]: number | string }[]
[ 1, "message" ] as const ;

如果输入“as const”,则输入为

type const = readonly [1, "message"]

它的优点在于计算机可以精确地进行类型推断。