如何使用TypeScript中的array接口定义数组长度和元素类型



我想要实现的目标可以如下所示:

// Will define a type that is an array with TWO elements where the first will be a string
// and the second a number
type SomeArrayType = [string, number];

我不喜欢对数组使用这种类型声明,我喜欢使用数组接口,比如:

// It will define a type that is an array of string with any number of elements in it
type AnotherArrayType = Array<string>;

但是,由于Array接口只接受一个类型参数,并且没有明确的方法来定义长度,有没有一种方法可以使用接口来实现它,或者我真的必须使用第一种方法来定义我的类型?

谢谢🤓

这是可能的,但需要编写一个小样板来实现我提到的第一种方法:

需要创建一个扩展Array 的接口

interface DefinedArray extends Array<string | number> {
length: 2;
0: string;
1: number;
}

然后,如果您使用它来键入变量

const myArray: DefinedArray = ['abc', 123];  // Correct
const anotherArray: DefinedArray = [123, 'abc'];  // Error
const moreArray: DefinedArray = ['abc', 123, 'abc123'];  // Error

使用声明

type SomeArrayType = [string, number];

interface DefinedArray extends Array<string | number> {
length: 2;
0: string;
1: number;
}

将导致相同的结果,并且两者都显示在官方文档中:https://www.typescriptlang.org/docs/handbook/2/objects.html#tuple-类型

所以,我认为这取决于你决定在你的代码中使用哪一个😃

更新

在使用了上面的DefinedArray示例一段时间后,我注意到不值得使用这种方法,因为样板可能会失控,所以我建议使用元组定义。😅

相关内容

  • 没有找到相关文章

最新更新