在Typescript中可转换类型和数组有什么区别

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)

出局是:鲍勃

所以我的问题是这两种方法的区别是什么?我们在哪里可以使用这种可索引类型而不是数组?

Tit*_*mir 5

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数组.