このyeomanジェネレーターを使用してTypeScriptでangular 1プロジェクトを作成しました: https://github.com/FountainJS/generator-fountain-systemjs
SystemJSとjspmを使用して依存関係を取得しますが、型定義にはnpmを使用します(DefinitelyTypedリポジトリを使用)。
私はここ数日、moment型定義をインポートしようとして苦労しています。 jspmを使用してmomentをインストールしましたが、独自の型定義が付属していることがわかりました。そのため、コマンドnpm install @types/moment --save-dev
を呼び出すと、スタブと非推奨の警告のみが表示されます。
これはMomentのスタブタイプの定義です( https://github.com/moment/moment )。 Momentは独自の型定義を提供するため、@ types/momentをインストールする必要はありません。
さて、それが私のエディター、プロジェクト、TypeScriptの設定なのか、それとも本当にTypeScriptの問題なのかはわかりませんが、momentの型定義を正しくインポートできないようです。
import moment from 'moment';
またはimport * as moment from 'moment';
のいずれかを実行すると、エディターでこのエラーが発生します(atom-TypeScriptを使用したアトムですが、Visual Studio Codeでも同じエラーが発生します)Cannot find module 'moment'.
このエラーにもかかわらず、アプリケーションをビルドすると正常に機能します(モーメント関数の呼び出しは機能します)。
私はインターネットで見つけた多くの解決策を試しましたが(明らかに、タイプ定義をすぐにインポートすることは一般的な問題です)、どれもうまくいきませんでした。昨日、node_modules/@types
内にディレクトリmoment
を手動で作成し、その中にmoment.d.ts
を配置することで、なんとか機能させることができました(ただし、名前をindex.d.ts
に変更する必要がありました)。
このソリューションがあまり好きではなかったので、少なくともnode_modules
構造を変更せずにデータを入れることができるtypesフォルダーを作成したかったのです。そこで、custom-types
フォルダーを作成し、そこにタイプ定義を含むmoment
フォルダーを配置し、custom-types
をtsconfig.json
に追加しました。これでうまくいくと思いましたが、実際にはエラーが再発しました...
今、私はアイデアがなく、他に何を試すべきか本当にわかりません。
これは私の現在のtsconfig.json
です(最後の試みで、custom-types
フォルダーとnode_modules
フォルダーと同じレベルにありますが、異なるパスでtsconfig.json
フォルダーを追加しました] _ファイル)
{
"compilerOptions": {
"sourceMap": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"removeComments": false,
"noImplicitAny": false,
"module": "system",
"target": "es5",
"moduleResolution": "classic",
"typeRoots": [
"node_modules/@types/",
"./custom-types/",
"custom-types/",
"../custom-types/",
"../../custom-types/",
"../../../custom-types/"
],
"types": [
"angular-ui-router",
"angular",
"angular-mocks",
"jquery",
"jasmine",
"moment",
"es6-shim"
]
},
"compileOnSave": false,
"filesGlob": [
"custom-types/**/*.ts",
"src/**/*.ts",
"src/**/*.tsx",
"!jspm_packages/**",
"!node_modules/**"
]
}
TypeScript(IntelliJ)でmoment
を使用しており、タイピングをインストールするための追加の作業はありません。
関連する構成は次のとおりです。
tsconfig.json
:"moduleResolution": "Node"
"types"
セクションはまったくありません./package.json
には@types/moment
がありません./node_modules/moment/
:./moment.d.ts
が存在します./package.json
には"typings": "./moment.d.ts"
があります./package.json
は"version": "2.14.1"
です"moduleResolution": "Classic"
に戻すと、TypeScriptはcannot find module 'moment'
と表示します。おそらくそれが原因です。