如何在打字脚本模块内部扩展构建类,例如HTMLElement或Node?

时间:2018-08-28 22:14:17

标签: typescript module

此代码在打字稿文件中起作用:

interface Node {
    replaceWith(newnode): void;
}

Node.prototype.replaceWith = function(newnode: Node) {
    this.parentElement.replaceChild(newnode, this);
};

文件成为模块后,它将立即停止工作。因此,添加以下内容:

export let x = 42 // export statement turns the ts file into a module

编译器抱怨:“节点”类型上不存在属性“ replaceWith” 。为什么会这样以及如何解决?

我知道扩展必须在全局“作用域”中声明,并且模块不再具有足够的全局性。但是,例如,在C ++中,我总是可以在一个块周围添加括号并使其成为全局范围,而在打字稿中却看不到类似的方式。

1 个答案:

答案 0 :(得分:1)

如果您在模块中,则必须在全局中声明全局类型,否则它们将被视为常规模块作用域类型:

declare global {
    interface Node {
        replaceWith(newnode: Node): void;
    }    
}
Node.prototype.replaceWith = function(newnode: Node) {
    this.parentElement.replaceChild(newnode, this);
};