She*_*nar 3 javascript typescript angular
我正在学习Typescript,我已经把它作为可索引类型,我在这里给出了示例:
interface StringArray {
[index: number]: string;
}
let myArray: StringArray;
myArray = ["Bob", "Fred"];
let myStr: string = myArray[0];
Run Code Online (Sandbox Code Playgroud)
出局是:鲍勃
我们可以将类型数组声明为:
let myArray:string[];
myArray = ["Bob","Fred"];
console.log(myArray[0]);
Run Code Online (Sandbox Code Playgroud)
出局是:鲍勃
所以我的问题是这两种方法的区别是什么?我们在哪里可以使用这种可索引类型而不是数组?
JavaScript中的任何对象都是可索引的,区别在于您获得的其他内容.
该StringArray接口定义了可以由被索引的任何对象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
Run Code Online (Sandbox Code Playgroud)
o满足StringArray但不是真的Array,因为它没有数组的所有方法(因此赋值arr失败),即使它确实它不是使用数组文字语法([])创建的,new Array所以它不是一个实例an Array(因此o instanceof Array返回false).
string[](并且等效地Array<string>)另一方面模拟真正的JavaScript数组.