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



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

这是我在我的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的其他定义,所以现在我收到以下错误:

类型错误: 无法读取未定义的属性"长度">

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

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

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

因为这不是您的情况,所以您只需要执行以下操作:

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

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

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

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

最新更新