如何扩展(而不是覆盖)现有的类型声明?

时间:2018-04-06 19:20:37

标签: typescript namespaces typescript-typings

我使用的其中一个库的类型声明略有过时。我将在上游报告此问题,但我想在本地解决此问题。不幸的是,当我添加缺少的声明时,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?

0 个答案:

没有答案