2017-08-13 8 views
0

Ich importiere ein JavaScript-Paket von npm, das nirgendwo eine Typoskript-Definitionsdatei hat. Ich möchte eine lokale Definitionsdatei erstellen, die ich schließlich zu DefinitelyTyped PR oder das Projekt selbst machen werde.Wie lokale Typescript-Definitionsdatei für js-Projekt in node_modules verwenden?

Ich kann nicht herausfinden, wo/wie zu erstellen und legen Sie die Definitionsdatei so, dass es lokal gefunden wird.

Ich könnte es in die node_modules/the-package-Verzeichnis kopieren, aber es wird während sonst sichere NPM-Operationen geplagt werden.

Von der Beobachtung tsc --traceResolution sehe ich keinen guten Weg, dies zu tun, es sei denn, es gibt eine Möglichkeit, types oder typings zu verwenden, die ich nicht dargestellt habe.

Antwort

1

Sie können einfach eine lokale Datei mit *.d.ts erstellen und ein Modul mit dem gleichen Namen wie Ihre Bibliothek erstellen.

Zum Beispiel, wenn Sie lodash verwendet haben, können Sie Typisierungen für sie erstellen, indem Sie eine d.ts-Datei zu erstellen:

declare module "lodash" { 

    interface Lodash { 
     map: Function 
    } 

    var _: Lodash; 
    export = _; 
} 

Siehe documentation on creating declarations.

+0

Wie/wo deklarieren Sie Ihre Definitionsdateien? Können Sie Ihre Frage mit einem reproduzierbaren Beispiel aktualisieren? – Saravana

2

Eine der Möglichkeiten, wie ich in dieser gescheitert war eine lokale *.d.ts Datei wie diese einzeiligen Modifikation von @ Saravana Beispiel zu erstellen:

import {Component} from 'react' 

declare module 'lodash' { 

    interface Lodash { 
     map: Function 
    } 

    var _: Lodash; 
    export = _; 
} 

Dies erinnert an der kryptischen Fehlermeldung

Error:(3, 16) TS2665:Invalid module name in augmentation. Module 'lodash' resolves to an untyped module at 'my-project/node_modules/lodash/lodash.js', which cannot be augmented.

Der Fehler ließ mich denken, dass dieser Ansatz völlig falsch sein muss, wenn es sich wirklich nur über einen trivialen, leicht zu behebenden Fehler beschwert. Wenn Sie in einer Datei die Datei importimport in ein Modul konvertieren, und wenn Typescript ein declare module in einem Modul sieht, wird davon ausgegangen, dass Sie versuchen, eine vorhandene Definition zu verbessern. Die Lösung ist trivial: nur den Import innerhalb des Blocks declare bewegen, etwa so:

declare module 'lodash' { 

    import {Component} from 'react' 

    interface Lodash { 
     map: Function 
    } 

    var _: Lodash; 
    export = _; 
} 

Wenn Sie ein IDE mit Auto-Import verwenden, wird es Ihre Definitionsdateien auf diese Weise jedes Mal brechen - erinnern die bewegen einführen!

Verwandte Themen