2016-11-21 4 views
2

In einem Typoskript-Projekt muss ich das bytewise Npm-Modul verwenden. Dieses Paket enthält keine Typdefinition im DefinitelyTyped npm Namespace hat, so kann ich nicht die Methode in Typoskript Dokumentation beschrieben verwenden:In Typoskript 2.0, wie eine einzelne Deklarationsdatei für Module im @ types npm Namespace (DefinitelyTyped Repo) nicht verfügbar?

npm install --save-dev @types/bytewise 

Da es keine Typdeklaration für dieses Modul ist, ist es nicht möglich, es zu benutzen , wie tsc beschwert sich mit: error TS2307: Cannot find module 'bytewise'.

Um das Problem zu beheben, habe ich eine Deklarationsdatei für bytewise geschrieben und es node_modules/@types/bytewise/index.d.ts hinzugefügt, die perfekt funktionierte.

Dies ist jedoch ein mühsames gemeinsames Muster: Ich benutze eine kleine npm Bibliothek, für die es keine @types Erklärung, erstellen Sie ein Verzeichnis unter node_modules/@types, fügen Sie ein index.d.ts die Erklärungen für die Bibliothek enthält, dann git Kraft/hinzufügen, dass Datei (seit node_modules wird standardmäßig ignoriert).

Offensichtlich plane ich nicht, diese Deklarationen für immer unter meinem privaten node_modules Verzeichnis zu verwalten, schließlich möchte ich sie zurück zu DefinitelyTyped beitragen, damit sie später leichter installiert werden können, aber anstatt ein separates Verzeichnis/Datei zu erstellen Für jede Bibliothek, die ich verwende, würde ich lieber eine einzelne vendor.d.ts Datei im Stammverzeichnis meines Projekts haben, mit allen Deklarationen, die bei npm nicht verfügbar sind. So etwas wie dies (das ist, was ich in meinem Projekt ATM habe):

import bl = require("bl"); 
import {Stream} from "stream"; 

declare module "bytewise" { 
    export function encode(val: any): bl; 
    export function decode(val: bl): any; 
    export const buffer: boolean; 
    export const type: string; 
} 

declare module "JSONStream" { 
    export function parse(patternOrPath?: string): Stream; 
    export function stringify(open?: string, sep?: string, close?: string); 
} 

Die Frage ist: Wie kann ich diese Erklärungen zur Verfügung zu stellen, um alle Dateien in meinem Projekt? Ich habe versucht, zu modifizieren tsconfig.json, um es vor dem Eintrittspunkt beinhalten:

{ 
    "compilerOptions": { 
    "target": "es6", 
    "module": "commonjs", 
    "noImplicitAny": false, 
    "removeComments": true, 
    "preserveConstEnums": true, 
    "outDir": "out", 
    "sourceMap": true 
    }, 
    "files": [ 
    "vendor.d.ts", 
    "index.ts"  
    ] 
} 

aber noch error TS2307: Cannot find module 'bytewise'. in den Dateien bekommen, wo ich import * as bytewise from "bytewise"; habe. Ich versuchte auch, einen /// <reference path="..." /> Kommentar hinzuzufügen, der auf vendor.d.ts zeigt, aber erhielt den gleichen Fehler. Muss ich wirklich eine separate Deklarationsdatei für jedes npm-Modul haben oder fehlt mir etwas?

Antwort

0

sind nur vendor.d.ts in Ihrem Projekt, ohne spezielle Konfiguration, aber mit einem Schlüssel zu ändern: die beiden Importe an der Spitze bewegen, um kurz nach der Linie

declare module "bytewise" { 

Alle Ausfuhren oder Einfuhren außerhalb Erklärungen machen dies schlägt fehl, mit kryptischen Nachrichten wie:

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

Verwandte Themen