TypeScript push在接口阵列上不可用

时间:2016-01-18 16:22:16

标签: typescript

我试图定义一个如下所述的数组接口:http://www.typescriptlang.org/Handbook#interfaces-array-types,然后将项目推送到它。问题是TypeScript说推送不存在。

我在playground中尝试了以下示例:

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

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

myArray.push('Barney'); // <- push doesn't exist ??

该接口不是常规数组吗?

2 个答案:

答案 0 :(得分:3)

它可以像常规数组一样,如果你告诉编译器它是:

interface StringArray extends Array<string> {
   [index: number]: string;
}

默认情况下,StringArray只包含您定义的成员。在某些情况下,类似数组的结构不支持所有数组方法,即使它有像数组一样的索引器 - 但在您的情况下,扩展Array接口将解决您的问题。

完整示例:

interface StringArray extends Array<string> {
   [index: number]: string;
}

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

myArray.push('Barney'); // <- push does exist :)

答案 1 :(得分:2)

我通常不定义一个数组接口,而是定义一个接口类型为:

的数组
var myArray: string[];
myArray = ["Bob", "Fred"];
myArray.push('Barney');

我更喜欢这个,因为它更容易,但说实话,我不知道功能是否有差异。