而与打字稿我遇到了那么以下有趣的现象玩耍:在Typscript扩展阵列打破构造
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陈述意见的输出。 有关可执行示例和javascript代码,请参见this typescript playground。
正如你所看到的,好像传递给构造函数的元素没有被添加到数组中。
关于extending expression的章节Typescript中的新内容表明应该可以像打字稿1.6中那样扩展本地数组类型。 另外,我没有在脚本语言参考中找到任何内容, 解释了这种行为。
我在这里发现的关于扩展数组的其他大多数问题都至少有一年的历史,并且通常会讨论打字前1.0版本,因此建议直接设置原型链。
我真的没有看到这里出了什么问题,我开始怀疑打字稿错误。 或至少某种类型的无证延长阵列的限制。
关于这里出了什么问题的任何建议?
有关此问题,请在https://github.com/Microsoft/TypeScript/issues/7340处打开问题。 – LongHairedHacker
请参阅http://perfectionkills.com/how-ecmascript-5-still-does-not-allow-to-subclass-an-array/ –