在`[index:number]:string;`中需要`index`是什么?

时间:2017-01-13 14:29:39

标签: typescript

我在这里阅读Indexable Types,并给出了以下示例:

interface StringArray {
    [index: number]: string;
}

let myArray: StringArray;
myArray = ["Bob", "Fred"];

let myStr: string = myArray[0];

我真的不明白为什么我们需要index

[index: number]: string;
 ^^^^^

似乎我可以在那里使用任何名称,它会起作用,例如:

interface StringArray {
    [foo: number]: string;
}

let myArray: StringArray;
myArray = ["Bob", "Fred"];

let myStr: string = myArray[0];

我也见过以下例子:

ngOnChanges(changes: {[propName: string]: SimpleChange}): void {
    console.log('Changes', changes);
}

据我所知使用某种内联索引类型声明:

{[propName: string]: SimpleChange}

使用propName代替index

1 个答案:

答案 0 :(得分:2)

为了使类型注释的语法保持一致(顺便说一下,它们基于类型理论注释),您需要在名称后面显示类型。

例如,以下是(愚蠢的)但有效的JavaScript:

var number = 5;

var arr = [number];

alert(arr[0]);

因此,想象一下,尝试解析文件并确定[number]是代码还是注释......在界面中它可能非常简单,但这些注释几乎可以出现在任何地方。然后有人试图编写注释,弄错了,它就变成了可执行的JavaScript。

因此,为了保持一致性和完整性,类型注释始终遵循相同的模式...

{name}: {type}

您可以阅读有关the link between TypeScript and Type Theory的更多信息。