如Handbook中所述,您可以使用字符串或数字索引声明自定义数组接口:
interface StringArray {
[index: number]: string;
}
所以我做了这个:
interface EventRegistrations {
[index:string]:ListenerEntry[];
}
问题很简单:如何初始化这样的事情?
以下是我尝试的内容和提供的错误消息(使用PhpStorm 2016.1和tsc 1.8.7):
foo:EventRegistrations = [];
类型'undefined []'不能分配给'EventRegistrations'
foo:EventRegistrations = [[]];
类型'undefined [] []'不能分配给'EventRegistrations'
foo:EventRegistrations = [index:string]:ListenerEntry[];
语法错误(预期,首先:是)
foo:EventRegistrations = [string]:ListenerEntry[];
语法错误(预期;其中:是)
foo:EventRegistrations = new EventRegistrations();
语法错误(找不到名称'EventRegistrations')
答案 0 :(得分:1)
在这种情况下,您实际上并未定义数组[]
,而是定义字典{}
,因为字符串索引器用于字典样式查找。
在下面的示例中,您将看到使用{}
而不是[]
声明对象,因为在JavaScript中,所有对象都是字典(甚至是数组!)数组只有特殊的语义和length
属性,允许它们表现得像数组(数字索引)
interface ListenerEntry {
foo: string;
bar: string;
}
interface EventRegistrations {
[index:string]:ListenerEntry[];
}
var x: EventRegistrations = {};
x["one"][0].foo = "Hello";
x["two"][1].bar = "World";