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
相关产品推荐
相关产品推荐

