创建一个扩展 Array 的类

问题描述 投票:0回答:1

我正在寻找一种方法来扩展 Array 并将构造函数的参数分散到 super.

interface Token {
    name: string
}

class Nodes extends Array {
    constructor (v: Token[]) {
        super(...v)
    }
}

const n = new Nodes([{ name: 'Thomas ' }])

这是给我的问题。这里有一个 游乐场环节.

我也试了一下。

interface Token {
    name: string
}

class Nodes extends Array {
    constructor (v: Token[]) {
        super()
        this.push(...v)
        Object.setPrototypeOf(this, Object.create(Nodes.prototype));
    }
}

const n = new Nodes([{ name: 'Thomas ' }])

console.log(n)

n.map(v => console.log(v.name))

Uncaught TypeError: 在new Nodes (eval at (main-3.js:1239), :5:14) at Nodes.map () at eval (eval at (main-3.js:1239), :11:3) at main-3.js:1239发现不可调用的@@iterator。

arrays typescript class extends
1个回答
0
投票

Array构造函数期望一个数字作为参数(数组的长度)。在你的例子中,可以调用 super() 没有参数,只需稍后推送项目。

class Nodes extends Array {
    constructor(v: Token[]) {
        super();
        this.push(...v);
    }
}

0
投票

试试这个。

interface Token {
  name: string;
}

class Nodes extends Array<Token> {
  constructor (...tokens: Token[]) {
    super();
    this.push(...tokens);
  }
}

const n = new Nodes({ name: 'Thomas ' }, { name: 'Juan' });
console.log(n);
n.map(v => console.log(v.name));

对我来说很有效 :)

© www.soinside.com 2019 - 2024. All rights reserved.