2017-02-16 1 views
0

Zum Beispiel, wenn ich folgendes in meiner app habe,Wie deklarieren wir Importtypen aus einer NPM-Bibliothek, die keine Deklarationsdateien enthält?

import Node from 'infamous/motor/Node' 
console.log(Node) 

, die ganz gut funktioniert. Aber der Moment, als ich etwas tun, tatsächlich mit ihm,

import Node from 'infamous/motor/Node' 
console.log(new Node) 

dann Typoskript beschweren, weil es für Node keine Typdefinition ist. Wie definiere ich den Typ des Knotens?

Die Bibliothek hat keine eigenen Typdeklarationen. Ich habe versucht, so etwas wie

import MotorNode from 'infamous/motor/Node' 

declare class MotorNode {} 
console.log(' --- ', new MotorNode) 

aber ich habe den Fehler

./src/app.tsx(6,8): error TS2440: Import declaration conflicts with local declaration of 'MotorNode' 

Antwort

2

Wenn ich brauche zu tun, was Sie zu tun versuchen, erstelle ich eine externals.d.ts Datei, in der ich Modul Augmentationen für mein Projekt gesteckt und stelle sicher, dass mein tsconfig.json es in die Zusammenstellung aufnimmt.

In Ihrem Fall die Augmentation könnte wie folgt aussehen:

declare module "infamous/motor/Node" { 
    class Node { 
    // Whatever you need here... 
    } 

    export default Node; 
} 

Ich habe es in einer separaten Datei, weil ein Modul Augmentation wie diese global sein muss (muss außerhalb jedes Modul) und Eine Datei, die eine Top-Level import oder export enthält, ist ein Modul. (Siehe this comment von einem TypScript-Beitragenden.)

+0

Danke Louis! Wie bekomme ich diese Datei, um von TypeScript aufgenommen zu werden? Insbesondere verwende ich Ts-Loader für Webpack. – trusktr

+0

Oh, ich sehe, füge es zu 'include' oder' files' hinzu. – trusktr

+0

Ja, das meine ich mit "stelle sicher, dass mein' tsconfig.json' es in die Zusammenstellung einbezieht. " – Louis

Verwandte Themen