声明全局数组扩展会导致编译器错误

时间:2018-08-24 11:16:03

标签: typescript

我想用TypeScript编写该数组扩展名:

if (!Array.prototype.remove) {
    Array.prototype.remove = function <T>(elem: T): T[] {
        return this.filter(e => e !== elem);
    }
}

所以我需要为其声明一个接口。该文件中没有任何内容,只是:

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

但是编译器哭了:

  

TS2669:全局范围的扩展只能直接嵌套在外部模块或环境模块声明中

有趣的是,当我在之前添加以下行时:

import * as $ from "jquery";

(与数组无关的东西或其他东西-这里不使用jQuery),对于编译器来说可以。

有什么想法吗?以及如何在不添加对jquery的引用的情况下声明接口?

1 个答案:

答案 0 :(得分:0)

在打字稿中,顶层具有导入/导出的文件将作为模块使用,而顶层中没有导入/导出的文件将作为脚本使用-这已经在全局范围内。

因此,如果要在全局中定义它,则可以添加一个导入,这样它就是一个模块,可以将其定义为全局-或只删除“ define global”并在gobal范围内将其作为脚本执行。

因此将其设置为文件中的内容就足够了:

interface Array<T> {
    remove(elem: T): Array<T>;
}