Я хотел бы создать класс на основе массива с дополнительным методом get
.
Изначально мой код выглядел так:Как экспортировать функцию как класс?
export class CircularArray extends Array<string> {
constructor(data: string[]) {
super();
this.push(...data);
}
get(i: number): string {
return this[i % this.length];
}
}
В машинописи 2.0.10 она работала отлично. Но когда я desided обновить машинописный до актуальной версии 2.2.0, я узнал, что составление этого кода have changed: Теперь машинопись обрабатывает значение, возвращенное из super()
вызова:
function CircularArray(data) {
var _this = _super.call(this) || this;
_this.push.apply(_this, data);
return _this;
}
Так возвращаемый объект является результатом из позвоните по телефону Array
. Конечно, его прототип Array.prototype
вместо CircularArray.prototype
и метод get
потерян. Как я могу это исправить?
Я пытался сделать что-то вроде этого:
export declare class CircularArray extends Array<string> {
constructor(data: string[]);
get(i: number): string;
}
export function CircularArray(data: string[]): CircularArray {
this.push(...data);
return this;
};
CircularArray.prototype = Object.create(Array.prototype);
CircularArray.prototype.get = function (i: number): string {
return this[i % this.length];
};
но получил ошибку:
error TS2300: Duplicate identifier 'CircularArray'.
error TS2300: Duplicate identifier 'CircularArray'.