我想用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的引用的情况下声明接口?
答案 0 :(得分:0)
在打字稿中,顶层具有导入/导出的文件将作为模块使用,而顶层中没有导入/导出的文件将作为脚本使用-这已经在全局范围内。
因此,如果要在全局中定义它,则可以添加一个导入,这样它就是一个模块,可以将其定义为全局-或只删除“ define global”并在gobal范围内将其作为脚本执行。
因此将其设置为文件中的内容就足够了:
interface Array<T> {
remove(elem: T): Array<T>;
}