我在这里阅读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
。
答案 0 :(得分:2)
为了使类型注释的语法保持一致(顺便说一下,它们基于类型理论注释),您需要在名称后面显示类型。
例如,以下是(愚蠢的)但有效的JavaScript:
var number = 5;
var arr = [number];
alert(arr[0]);
因此,想象一下,尝试解析文件并确定[number]
是代码还是注释......在界面中它可能非常简单,但这些注释几乎可以出现在任何地方。然后有人试图编写注释,弄错了,它就变成了可执行的JavaScript。
因此,为了保持一致性和完整性,类型注释始终遵循相同的模式...
{name}: {type}
您可以阅读有关the link between TypeScript and Type Theory的更多信息。