2017-05-26 8 views
2

私は既存のJSプロジェクトにTypeScriptを設定しています。型が指定されていないnpmモジュールにタイピングを追加する方法を理解しようとしています。npmユーティリティのTypeScriptタイピングを手作業で追加

このラインtypings/modulesCannot find module 'foo'

import X from 'foo';

エラーアウト私は親に

declare module foo { 
    export default class XXX{ 

    } 
} 

とそこindex.d.tsファイルでfooフォルダを持っていますtypings/index.d.ts

を追加しました

/// <reference path="modules/foo/index.d.ts" />

まだ何もありません。

マイtsconfig.jsonファイルには、あなたが引用符を使用してモジュールを宣言する必要があり、この

{ 
    "compilerOptions": { 
     "target": "esnext", 
     "baseUrl": "./src", 
     "jsx": "react", 
     "allowSyntheticDefaultImports": true, 
     "allowJs": true, 
     "moduleResolution": "node", 
     "module": "es2015", 
     "experimentalDecorators": true, 
     "lib": ["es2015", "dom"], 
     "typeRoots" : ["./typings/modules", "./node_modules/@types"] 
    }, 
    "include": [ 
     "./src/**/*.ts", 
     "./src/**/*.tsx" 
    ] 
} 

答えて

2

次のようになります。

declare module "foo" { 
    export default class XXX{ 

    } 
} 

が狂ったようですか?引用符なしで宣言されたモジュールは、実際には名前空間に似ています。実際にコード内にモジュールを宣言しているわけではありません。 documentationから

「内部モジュールは、」今「の名前空間」です。 ECMAScript 2015の用語である と一致するように、「外部モジュール」は という単純な「モジュール」になりました(つまり、モジュールX {は現在好ましい名前空間X {と同等です)。

も参照してください:What's the difference between declaring a module in TypeScript with quotes vs without?

+0

プラスワン感謝を。私がアフリカにいないとすぐにテストして受け入れます。 –

関連する問題