通过向全局接口添加新方法来扩展Array类

时间:2017-06-13 12:59:56

标签: arrays typescript declaration

我正在尝试向last类添加新方法(Array)。

我正在test.ts文件中执行此操作(已声明其他函数):

declare global {
    interface Array<T> {
        last(): T;
    }
}

if (!Array.prototype.last) {
    Array.prototype.last = function <T>(): T {
        return this[this.length - 1];
    }
}

然而这不起作用,因为它似乎完全抹去了Array的其他定义所以现在我得到如下错误:

  

TypeError:无法读取属性&#39;长度&#39;未定义的

如果我尝试访问任何数组的length属性,就会发生这种情况。

我如何正确实现这一目标?声明是否必须单独进入文件?

1 个答案:

答案 0 :(得分:1)

您只需要在导入/导出时扩充全局模块。

因为这不是你的情况,你只需要这样做:

interface Array<T> {
    last(): T;
}

也就是说,不要用declare global { ... }包装它。

另外,在实际实现中,不需要泛型,它可以/应该是:

if (!Array.prototype.last) {
    Array.prototype.last = function(): any {
        return this[this.length - 1];
    }
}