Typescript 如何扩展(而不是重写)现有的类型声明?

Typescript 如何扩展(而不是重写)现有的类型声明?,typescript,namespaces,typescript-typings,Typescript,Namespaces,Typescript Typings,我正在使用的一个库的类型声明有点过时。我会向上游报告这个问题,但我想在本地解决这个问题。不幸的是,当我添加缺少的声明时,TypeScript覆盖了整个名称空间,忘记了以前的所有声明 如何向现有接口添加额外的函数重载? 我的tsconfig.json看起来像这样(我npm安装ed@types/codemirr): 我的代码(test.ts)如下所示: namespace Test { export function test() { var host: HTMLElemen

我正在使用的一个库的类型声明有点过时。我会向上游报告这个问题,但我想在本地解决这个问题。不幸的是,当我添加缺少的声明时,TypeScript覆盖了整个名称空间,忘记了以前的所有声明

如何向现有接口添加额外的函数重载?

我的
tsconfig.json
看起来像这样(我
npm安装
ed
@types/codemirr
):

我的代码(
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?

当您使用CodeMirror(主机)时,您要求编译器将命名空间视为一种类型。如果您希望调用接口编辑器的成员,则需要接口的实现类。1.为什么需要名称空间测试和代码镜像?2.你可以不使用名称空间吗?库导出一个顶级名称空间;我不需要它,它就是这样设计的;它同时也是一个名称空间和一个函数。您可以将值“CommonJS”用于tsconfig.json模块:?在更改配置后共享tsc输出的屏幕截图。@user2347763它根本不做任何更改。我在OP中发布了输出。This-test.ts(10,45):错误TS2708:无法将命名空间“CodeMirror”用作值。-这就是我第一次评论的意思。虽然文档中说您使用实例化with=codemirr(host),但由于api不适用于nodejs,因此我假设模块解析路径必须采用nodejs路径,但由于您说将模块:条目更改为commonJS不会改变任何内容,因此您必须提供有关您的客户端的更多信息。你在用Browserify吗?
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'?