2017-07-28 11 views
7

Staram się zapewnić typowania na opakowaniu, że ich nie ma:Gdzie należy umieścić niestandardowe pliki .d.ts?

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';` 

używam TS-ładowarka w WebPack z maszynopisu 2.4.2 i mam następujący korzenie typu ustanowione w tsconfig.json:

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

próbowałem naśladować strukturę pakietów w node_modules/@types:

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

z następującym w index.d.ts:

declare class InputMask {} 
export default InputMask; 

Ale błąd nadal istnieje. Co ja robię źle? Gdzie powinienem umieścić te niestandardowe pliki .d.ts?

Jaka jest różnica między node_modules/@types a jakimkolwiek typem roota? Dlaczego TypeScript traktuje je inaczej?

Odpowiedz

3

Możliwe rozwiązanie: umieść następujące w index.d.ts i będzie skompilować:

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

ja nadal nie rozumiem specjalnego traktowania że node_modules/@types dostaje, choć.

+0

'node_modules/@ types' służy do przechowywania pakietów stron trzecich zawierających informacje o typach dla pakietów, które nie są wyposażone w deklaracje wbudowane. Otrzymuje specjalną obsługę, ponieważ nie importuje się z niego bezpośrednio, a raczej każdy pakiet deklaracji w jest postrzegany jako nałożony na pakiet, dla którego zawiera typy. '" typRoots "' pozwala dostosować lokalizację lub dodać dodatkowe katalogi, które są traktowane w ten specjalny sposób. –

+0

@AluanHaddad - Jeśli dodatkowe katalogi w "typRootach" również będą traktowane w ten specjalny sposób, to dlaczego katalog przeniesienia dla jakiegoś pakietu z 'node_modules/@ types' na inny typRoot zepsuje kompilację? – Rogach

+0

Nie ma wystarczającej ilości informacji, aby powiedzieć. Brak tsconfig, rozdzielczość modułu, itp. Wyobraźmy sobie, że tak jest z zewnętrznym modułem zewnętrznym_, który i tak ma inną semantykę rozdzielczości. W szczególności nie rozwiązuje go ścieżka pliku. –

Powiązane problemy