我希望使用其他方法get
创建基于数组的类
最初我的代码看起来像这样:
export class CircularArray extends Array<string> {
constructor(data: string[]) {
super();
this.push(...data);
}
get(i: number): string {
return this[i % this.length];
}
}
在typescript 2.0.10中它完美无缺。但当我决定将typescript更新为实际版本2.2.0时,我发现编译此代码have changed:now typescript处理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];
};
但收到了错误:
错误TS2300:重复的标识符&#39; CircularArray&#39; 错误TS2300:重复的标识符&#39; CircularArray&#39;。
答案 0 :(得分:0)
找到解决方案:
export interface CircularArray extends Array<string> {
constructor(data: string[]): CircularArray;
get(i: number): string;
}
export var CircularArray: { new (data: string[]): CircularArray } = function CircularArray(data: string[]): void {
this.push(...data);
} as any;
CircularArray.prototype = Object.create(Array.prototype);
CircularArray.prototype.get = function (i: number): string {
return this[i % this.length];
};