typescript - Hur utökar jag (snarare än att skriva över) en befintlig typdeklaration?


Typdeklarationerna för ett av biblioteken som jag använder är lite föråldrade. Jag kommer att rapportera problemet uppströms, men jag vill gärna arbeta runt problemet lokalt. Tyvärr, när jag lägger till den saknade deklarationen, skriver TypeScript över hela namnområdet och glömmer alla tidigare deklarationer.

Hur lägger jag till en extra funktionsöverlagring till ett befintligt gränssnitt?

Min tsconfig.json ser ut så här (och jag npm installade @types/codemirror):

{ "compilerOptions": { "target": "es5", "module": "none",
                       "lib": ["es5", "dom"],
                       "strict": true },
  "files": ["test.ts"] }

Min kod (test.ts) ser ut så här:

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 avvisar den sista raden (codemirror.d.ts-filen känner inte till det andra argumentet). Baserat på avsnittet "Declaration merging" i handboken, lägger jag till följande högst upp i min fil:

declare namespace CodeMirror {
    interface Editor {
        setValue(str: string, n: number): void;
    }
}

… vilket bryter allt: nu klagar TypeScript på att getValue är okänt, och att CodeMirror är ett namnrymd, inte en funktion:

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'?

Hur lägger jag till för TypeScript information om den saknade överlagringen av setValue utan att skriva över hela CodeMirror-namnområdet?