我正在学习 Typescript,我已经到了可索引类型的地步,我将示例展示为:
interface StringArray {
[index: number]: string;
}
let myArray: StringArray;
myArray = ["Bob", "Fred"];
let myStr: string = myArray[0];
输出是:Bob
因为我们可以将类型数组声明为:
let myArray:string[];
myArray = ["Bob","Fred"];
console.log(myArray[0]);
输出是:Bob
所以我的问题是这两种方法有什么区别?我们在哪里可以使用这种可索引类型而不是数组?
最佳答案
JavaScript 中的任何对象都是可索引的,区别在于您得到的是什么。
StringArray
接口(interface)定义任何可以被 number
索引的对象并且具有字符串类型的所有值。当然这可以是一个数组,但它可以是满足此约束的任何其他对象。例如:
interface StringArray {
[index: number]: string;
}
let o : StringArray = {
0: "A", //ok
// "V" : "B" // error
// 1: 0 error
}
let arr : Array<string> = o; // Error
console.log(o instanceof Array) // false
o
满足StringArray
但不是真正的 Array
,因为它没有数组的所有方法(因此分配给 arr
失败),即使它有它也不是使用数组文字语法( []
)或 new Array
创建的所以它不是 Array
的实例(因此 o instanceof Array
返回 false)。
string[]
(和等效的 Array<string>
)在另一方面模拟一个真正的 JavaScript 数组。
关于javascript - Typescript 中的可索引类型和数组有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51263290/