此代码在打字稿文件中起作用:
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 ++中,我总是可以在一个块周围添加括号并使其成为全局范围,而在打字稿中却看不到类似的方式。
答案 0 :(得分:1)
如果您在模块中,则必须在全局中声明全局类型,否则它们将被视为常规模块作用域类型:
declare global {
interface Node {
replaceWith(newnode: Node): void;
}
}
Node.prototype.replaceWith = function(newnode: Node) {
this.parentElement.replaceChild(newnode, this);
};