【发布时间】:2016-06-14 02:10:21
【问题描述】:
在玩打字稿时,我遇到了以下有趣的行为:
class ExtArray<U> extends Array<U> {
constructor(...args : U[]) {
super(...args);
}
public contains(element : U) : boolean {
var i = this.indexOf(element);
return i !== -1;
}
}
var test : ExtArray<string> = new ExtArray("a", "b", "c");
test.push("y");
console.log(test.length); // 1
console.log(test[0]); // y
console.log(test[1]); // undefined
console.log("Has a: " + test.contains("a")); // Has a: false
console.log("Has y: " + test.contains("y")); // Has y : true
我已将 console.log 语句的输出添加为 cmets。 有关可执行示例和 javascript 代码,请参阅 this typescript playground。
如您所见,传递给构造函数的元素似乎没有添加到数组中。
Whats new in Typescript 中关于 extending expression 的部分建议应该可以像 typescript 1.6 中那样扩展原生 Array 类型。 我也没有在打字稿语言参考中找到任何东西, 这解释了这种行为。
我在这里找到的关于扩展数组的大多数其他问题至少有一年的历史,并且通常谈论的是 typescript 的 1.0 之前的版本,因此建议直接设置原型链。
我真的看不出这里出了什么问题,我开始怀疑是打字稿错误。 或者至少对扩展数组有某种未记录的限制。
这里出了什么问题?
【问题讨论】:
-
在github.com/Microsoft/TypeScript/issues/7340 就这个问题打开了一个问题。
标签: arrays constructor typescript