Búsqueda de sitios web

typescript - ¿Cómo puedo extender (en lugar de sobrescribir) una declaración de tipo existente?


Las declaraciones de tipos para una de las bibliotecas que estoy utilizando están un poco desactualizadas. Reportaré el problema al repositorio original, pero me gustaría solucionar el problema localmente. Desafortunadamente, cuando agrego la declaración que falta, TypeScript sobrescribe todo el espacio de nombres, olvidándose de todas las declaraciones anteriores.

¿Cómo agrego una sobrecarga de función adicional a una interfaz existente?

Mi tsconfig.json se ve así (y yo npm installé @types/codemirror):

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

Mi código (test.ts) se ve así:

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 rechaza la última línea (el archivo codemirror.d.ts no conoce el segundo argumento). Basándome en la sección de "Fusión de declaraciones" del manual, agrego lo siguiente al principio de mi archivo:

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

… lo que rompe todo: ahora TypeScript se queja de que getValue es desconocido, y de que CodeMirror es un espacio de nombres, no una función:

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

¿Cómo puedo indicarle a TypeScript sobre la sobrecarga faltante de setValue sin sobrescribir todo el espacio de nombres de CodeMirror?