Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Typescript中的可索引类型和数组有什么区别_Javascript_Angular_Typescript - Fatal编程技术网

Javascript Typescript中的可索引类型和数组有什么区别

Javascript Typescript中的可索引类型和数组有什么区别,javascript,angular,typescript,Javascript,Angular,Typescript,我正在学习Typescript,并且我已经达到了可索引类型的程度,在这里我给出了如下示例: interface StringArray { [index: number]: string; } let myArray: StringArray; myArray = ["Bob", "Fred"]; let myStr: string = myArray[0]; 出局者是:鲍勃 我们可以将类型数组声明为: let myArray:string[]; myArray = ["Bob","

我正在学习Typescript,并且我已经达到了可索引类型的程度,在这里我给出了如下示例:

interface StringArray {
    [index: number]: string;
}
let myArray: StringArray;
myArray = ["Bob", "Fred"];

let myStr: string = myArray[0];
出局者是:鲍勃

我们可以将类型数组声明为:

let myArray:string[];
myArray = ["Bob","Fred"];
console.log(myArray[0]);
出局者是:鲍勃


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

JavaScript中的任何对象都是可索引的,区别在于您还得到了什么

StringArray
接口定义了任何可由
number
索引的对象,并且所有值均为string类型。当然,这可以是数组,但也可以是满足此约束的任何其他对象。例:

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={
0:“A”//ok
//“V”:“B”//错误
//1:0错误
}
设arr:Array=o;//错误
console.log(o instanceof Array)//false
o
满足
StringArray
,但不是真正的
数组
,因为它没有数组的所有方法(因此分配给
arr
失败),即使它有,也不是使用数组文字语法创建的(
[]
)或者
新建数组
,因此它不是
数组的实例
(因此
o数组的实例
返回false)


另一方面,
string[]
(相当于
Array
)为真正的JavaScript数组建模。

@KiranShahi抱歉,这不是重复,这解释了定义数组的两个语法之间的差异,这是可索引类型和array@TitianCernicova-德拉戈米尔:)