Typescript 扩展数组<;数量>;

Typescript 扩展数组<;数量>;,typescript,Typescript,为什么以下各项不能按预期工作: class MyArray extends Array<number> { constructor(n: number) { super(n); } } function initalize() { var myArray = new MyArray(4); var l = myArray.length; // l should be 4 } 类MyArray扩展了数组 { 构造函数(n:编号

为什么以下各项不能按预期工作:

class MyArray extends Array<number>
{
    constructor(n: number)
    {
        super(n);
    }
}

function initalize()
{
    var myArray = new MyArray(4);
    var l = myArray.length; // l should be 4
}
类MyArray扩展了数组
{
构造函数(n:编号)
{
超级(n);
}
}
函数初始化()
{
var myArray=新的myArray(4);
var l=myArray.length;//l应该是4
}

“l”原来是0,而不是我预期的4。我是否在“MyArray”中实现构造函数没有什么区别。

您的代码将被传输到

var __extends = (this && this.__extends) || function (d, b) {
    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
    function __() { this.constructor = d; }
    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
var MyArray = (function (_super) {
    __extends(MyArray, _super);
    function MyArray(n) {
        _super.call(this, n);
    }
    return MyArray;
})(Array);
function initalize() {
    var myArray = new MyArray(4);
    var l = myArray.length; // l should be 4
}
问题是您不再处理具有特殊属性的原始本机类型。因此,您的扩展类型——即使您已经成功了——将受到严重限制,并使其他人感到困惑


详细信息和问题可以在阿克塞尔·劳施迈耶的文章中找到:

我接受这一点作为答案,似乎没有解决办法。我宁愿Typescript不允许这样的构造,因为它们没有意义。@Gerhard是的,Typescript远不是一种真正成熟的语言,尽管语法本身感觉非常完整。无论如何,这里有一个解决方法:一个内部
数组
实例,它的所有方法都复制到您的类型上,所有这些方法都只调用内部
数组
对象上的相应方法。@John这就是我尝试过的,但没有成功实现一个索引器来使用myArray[I]访问数组元素。@Gerhard AFAIK,数组的数值索引器与数值属性类似。当元素添加到内部数组时,您应该能够在包装器对象上设置相应的类数值属性。