我正在寻找一种方法来扩展 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。
Array构造函数期望一个数字作为参数(数组的长度)。在你的例子中,可以调用 super()
没有参数,只需稍后推送项目。
class Nodes extends Array {
constructor(v: Token[]) {
super();
this.push(...v);
}
}
试试这个。
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));
对我来说很有效 :)