2017-07-28 14 views
7

私はそれらを持っていないパッケージのためのタイピングを提供しようとしている:カスタム.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';` 

私はtypescriptです2.4.2でのWebPACKにTS-ローダーを使用している、と私はに設定し、次のタイプのルーツを持っていますtsconfig.json:

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

私はnode_modules/@typesにパッケージ構造を模倣しようとした:

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

以下でに:

declare class InputMask {} 
export default InputMask; 

しかし、エラーはまだあります。私は間違って何をしていますか?これらのカスタム.d.tsファイルはどこに置く必要がありますか?

node_modules/@typesと他のタイプのルートの違いは何ですか?なぜTypeScriptはそれらを別々に扱いますか?

答えて

3

解決策:index.d.tsに次のように配置し、それがコンパイルされます:node_modules/@typesが得ることを私はまだかかわらず、特別な処理を理解していない

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

+0

'node_modules/@ types'は、宣言が組み込まれていないパッケージの型情報を含むサードパーティパッケージを保持するために使用されます。それは、宣言パッケージを直接インポートするのではなく、タイプを含むパッケージにオーバーレイされているように見えます。 '' typeRoots "'は、この特別な方法で扱われるディレクトリをカスタマイズしたり、ディレクトリを追加したりすることができます。 –

+0

@AluanHaddad - "typeRoots"内の別のディレクトリもこの特殊な方法で扱われると、いくつかのパッケージのディレクトリを 'node_modules/@ types'から別のtypeRootに移動するとコンパイルが中断されるのはなぜですか? – Rogach

+0

ここで十分な情報がありません。 tsconfig、モジュール解決などはありませんでした。あなたが終わったのは_外部のモジュールです_とにかく解像度の意味が異なります。特に、ファイルのパスによって解決されません。 –

関連する問題