You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript中实现带自定义属性的类数组类报错求助

问题解决方法

你的代码报错是因为继承Array时,使用super(...items)初始化会生成内置Array实例,无法正确承载子类的私有字段,导致数组的迭代器方法失效,进而在调用map时抛出错误。

以下是两种正确的实现方式:

方式一:通过push初始化元素

class MyArray<T> extends Array<T> {
    constructor(items: T[], data?: any) {
        super();
        this.push(...items);
        this.#data = data;
    }

    #data: any;

    public get data() {
        return this.#data;
    }
}

方式二:指定长度后填充元素

class MyArray<T> extends Array<T> {
    constructor(items: T[], data?: any) {
        super(items.length);
        items.forEach((item, idx) => this[idx] = item);
        this.#data = data;
    }

    #data: any;

    public get data() {
        return this.#data;
    }
}

修改后执行以下代码即可正常运行:

const myArray = new MyArray([1, 2, 3], {});
myArray.map(item => item + 1); // 返回 [2, 3, 4]

内容的提问来源于stack exchange,提问作者Mike Cenker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 17:33:11