bas*_*rat 213
在TypeScript中使用多种类型定义数组
使用联合类型(string|number)[]
演示:
const foo: (string|number)[] = [ 1, "message" ];
Run Code Online (Sandbox Code Playgroud)
我有一个表格数组:[1,"message"].
如果您确定始终只有两个元素,[number, string]
那么您可以将其声明为元组:
const foo: [number, string] = [ 1, "message" ];
Run Code Online (Sandbox Code Playgroud)
cur*_*rpa 70
如果您将其视为元组(请参阅语言规范的 3.3.3节),那么:
var t:[number, string] = [1, "message"]
Run Code Online (Sandbox Code Playgroud)
要么
interface NumberStringTuple extends Array<string|number>{0:number; 1:string}
var t:NumberStringTuple = [1, "message"];
Run Code Online (Sandbox Code Playgroud)
小智 20
我的TS lint抱怨其他解决方案,所以适合我的解决方案是:
item: Array<Type1 | Type2>
Run Code Online (Sandbox Code Playgroud)
如果只有一种类型,可以使用:
item: Type1[]
Run Code Online (Sandbox Code Playgroud)
Ole*_*nyi 10
TypeScript 3.9+ 更新(2020 年 5 月 12 日)
现在,TypeScript 也支持命名元组。这大大增加了代码的可理解性和可维护性。查看官方 TS 游乐场。
所以,现在而不是未命名:
const a: [number, string] = [ 1, "message" ];
Run Code Online (Sandbox Code Playgroud)
我们可以添加名称:
const b: [id: number, message: string] = [ 1, "message" ];
Run Code Online (Sandbox Code Playgroud)
注意:您需要一次性添加所有名称,不能省略某些名称,例如:
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.
Run Code Online (Sandbox Code Playgroud)
提示:如果你不确定最后一个元素的数量,你可以这样写:
type t = [msg: string, ...indexes: number];// means first element is a message and there are unknown number of indexes.
Run Code Online (Sandbox Code Playgroud)
小智 6
我已经决定使用以下格式来键入可以具有多种类型项的数组。
Array<ItemType1 | ItemType2 | ItemType3>
这对于测试和类型防护很有效。https://www.typescriptlang.org/docs/handbook/advanced-types.html#type-guards-and-differentiating-types
此格式不适用于测试或类型防护:
(ItemType1 | ItemType2 | ItemType3)[]
小智 6
如果您有兴趣获取数字或字符串数组,您可以定义一个类型,该类型将采用以下任一数组
type Tuple = Array<number | string>
const example: Tuple = [1, "message"]
const example2: Tuple = ["message", 1]
Run Code Online (Sandbox Code Playgroud)
如果您期望特定顺序的数组(即数字和字符串)
type Tuple = [number, string]
const example: Tuple = [1, "message"]
const example2: Tuple = ["messsage", 1] // Type 'string' is not assignable to type 'number'.
Run Code Online (Sandbox Code Playgroud)
我正在使用这个版本:
exampleArr: Array<{ id: number, msg: string}> = [
{ id: 1, msg: 'message'},
{ id: 2, msg: 'message2'}
]
Run Code Online (Sandbox Code Playgroud)
它与其他建议有点相似,但仍然很容易记住。
const myarray:(TypeA | TypeB)[];
Run Code Online (Sandbox Code Playgroud)
或者更好地避免在多个位置进行更改,以防您需要添加其他类型、创建类型
type MyMixedType = TypeA | TypeB;
const myarray: MyMixedType[];
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
55095 次 |
最近记录: |