2017-07-28 5 views
7

Ich versuche Typisierungen für das Paket zu liefern, die sie nicht haben:Wo sollte ich benutzerdefinierte .d.ts-Dateien platzieren?

error TS7016: Could not find a declaration file for module 'inputmask-core'. './node_modules/inputmask-core/lib/index.js' implicitly has an 'any' type. 
Try `npm install @types/inputmask-core` if it exists or add a new declaration (.d.ts) file containing `declare module 'inputmask-core';` 

mit Typoskript 2.4.2, und ich habe die folgenden Typen Wurzeln einrichten Ich bin mit ts-loader in in webpack tsconfig.json:

"typeRoots": [ 
    "./node_modules/@types", 
    "./src/client/types" 
] 

ich habe versucht, die Paketstruktur in node_modules/@types zu imitieren:

src/client/types 
|--inputmask-core 
    |--index.d.ts 

Mit folgendem in index.d.ts:

declare class InputMask {} 
export default InputMask; 

Aber der Fehler ist immer noch da. Was mache ich falsch? Wo sollte ich diese benutzerdefinierten .d.ts-Dateien platzieren?

Und was ist der Unterschied zwischen und einem anderen Typ Root? Warum behandelt TypeScript sie anders?

Antwort

3

Mögliche Lösung: Stellen Sie das folgende in index.d.ts, und es wird kompilieren:

declare module "inputmask-core" { 
    declare class InputMask {} 
    export default InputMask; 
} 

ich immer noch nicht die besondere Behandlung verstehen, dass node_modules/@types bekommt, though.

+0

'node_modules/@ types' wird verwendet, um die Third-Party-Pakete mit Typinformationen für Pakete zu enthalten, die nicht mit eingebauten Deklarationen versehen sind. Es wird dadurch besonders behandelt, dass Sie nicht direkt, sondern jedes Deklarationspaket importieren Es wird als überlagert auf dem Paket angezeigt, für das es Typen enthält. '" typeRoots "' können Sie den Speicherort anpassen oder zusätzliche Verzeichnisse hinzufügen, die auf diese spezielle Weise behandelt werden. –

+0

@AluanHaddad - Wenn zusätzliche Verzeichnisse in "typeRoots" auch auf diese spezielle Weise behandelt werden, warum bricht dann das Verschieben des Verzeichnisses für ein Paket von 'node_modules/@ types' zu anderen typeRoot die Kompilierung ab? – Rogach

+0

Es gibt nicht genug Informationen hier zu erzählen. Nein, tsconfig, Modulauflösung, usw. Was Sie herausgefunden haben, ist ein _ambient externes Modul_ und das hat sowieso eine andere Auflösungssemantik. Insbesondere wird es nicht durch den Pfad der Datei aufgelöst. –

Verwandte Themen