而與打字稿我遇到了那麼以下有趣的現象玩耍:在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/ –