最近 Flowtype から TypeScript に乗り換えました。
主に VSCode で書いてるんですが、
こういうエラーが出る件について。
TypeScript のコンパイラは通るので、たぶん VSCode の問題なのかなと思ってます。
VSCode と TypeScript とで依存解決の仕組みが違うんでしょうか。
とりあえず tsconfig.json にこのように書くと直りました。
{
...
"files": [
"node_modules/aws-sdk/index.d.ts",
"index.ts"
],
...
}
TypeScript サーバーを再起動するか VSCode を再起動することで反映されます。
index.ts はアプリケーションのメインなので適宜変えてください。
TSLint と両立しない問題
で、先のように変えると今度は TSLint を tslint --fix --project tsconfig.json 'index.ts' 'src/**/*' みたいに実行している場合に src/**/* が tsconfig.json の files に存在しないため正常にリントできません。
files ではなく include で設定すれば TSLint は問題ないのですが、また aws-sdk が cannot find module になるというループに陥ります。(なぜ files でなければならないのか
)
ツラいですが、TypeScript のための tsconfig.json と、TSLint のための tsconfig.lint.json を作って、TSLint の実行を tslint --fix --project tsconfig.lint.json 'index.ts' 'src/**/*' のようにすることで解決しています。
tsconfig.json には先のように files 指定を含み、tsconfig.lint.json にはそれを含めず CLI オプションを使います。
@types に登録のあるライブラリでも、ライブラリ自体が declaration を提供している場合でも、同様の問題は起きていないのでなぜ aws-sdk だけなのかは分かりません。index.d.ts ではなく aws-sdk.d.ts じゃないと解決できないとかそんな感じでしょうか。
もっとスマートな対応方法があればどなたか教えてください。
アップデートで直ることを期待してます。
