初始化数组接口

时间:2016-03-30 09:50:05

标签: typescript

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')

1 个答案:

答案 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";