VSCode で TypeScript 書いてるときに aws-sdk が cannot find module になる件


最近 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.jsonfiles に存在しないため正常にリントできません。

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 じゃないと解決できないとかそんな感じでしょうか。

もっとスマートな対応方法があればどなたか教えてください。

アップデートで直ることを期待してます。