我使用的其中一个库的类型声明略有过时。我将在上游报告此问题,但我想在本地解决此问题。不幸的是,当我添加缺少的声明时,TypeScript会覆盖整个命名空间,忘记所有先前的声明。
如何在现有界面中添加额外的函数重载?
我的tsconfig.json
看起来像这样(我npm install
编辑@types/codemirror
):
{ "compilerOptions": { "target": "es5", "module": "none",
"lib": ["es5", "dom"],
"strict": true },
"files": ["test.ts"] }
我的代码(test.ts
)如下所示:
namespace Test {
export function test() {
var host: HTMLElement = document.createElement("div");
var editor: CodeMirror.Editor = CodeMirror(host);
var oldText = editor.getValue();
editor.setValue("", -1);
}
}
Typescript拒绝最后一行(codemirror.d.ts文件不知道第二个参数)。基于"声明合并"手册的一部分,我将以下内容添加到我的文件顶部:
declare namespace CodeMirror {
interface Editor {
setValue(str: string, n: number): void;
}
}
...它破坏了一切:现在TpeScript抱怨getValue
未知,并且CodeMirror是命名空间,而不是函数:
test.ts(10,45): error TS2708: Cannot use namespace 'CodeMirror' as a value.
test.ts(11,34): error TS2551: Property 'getValue' does not exist on type 'Editor'. Did you mean 'setValue'?
如何在不覆盖整个CodeMirror名称空间的情况下添加有关setValue
缺失重载的tell typescript?