我想要实现的目标可以如下所示:
// 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示例一段时间后,我注意到不值得使用这种方法,因为样板可能会失控,所以我建议使用元组定义。😅