EclipseのTypescriptエディタでは、たまに型チェックがうまく動かずany
になる事がある。メソッドの候補が表示されないと面倒なので何とかしたいのだが、いくつか原因があるので大抵は試行錯誤になる。いくつか良く嵌まるパターンを以下にまとめる。
Typescriptのバージョンが異なる
EclipseのTypescriptプラグインでは、型をチェックするためのトランスパイラを指定できる。デフォルトでは「内蔵」になっており、Package.json
でインストールしたローカルのトランスパイラとは関係が無い。これにより、「ビルドはできるがエディタ上はエラーになる」という不可解なことが起こる。
Typescriptのバージョンが正しいかを確認するには、EclipseでWindow > Preferences > JavaScript > Typescript > Runtime から以下の設定画面を開く。Consume Typescript With
でEmbeddedが選択している場合、インストールから時間が経つことで新しい言語仕様に対応できずエラーになる可能性がある。
以下のような設定があると思う。
Typescriptの場所 | パス |
---|---|
プロジェクトごと | ${workspace_loc:プロジェクト名/node_modules/typescript} |
グローバル | <npm config lisで表示されるprefix>/node_modules/typescript} |
tsconfigの設定に不備がある
結構落とし穴があるが、Google検索すれば大抵同じ間違いに嵌まった人がいるので、大抵の答えは得られる。以下のようなケースがある。(これらはトランスパイルもエラーになるから特に不可解ではないが…)
ライブラリを指定していない
Promise
,HTMLElement
,async/await
,array.map
など、当たり前に使えるべきものが無いというエラーが起きる場合、compilerOptions
のlib
が不足しているか、指定はしているがes*
のバージョンが非対応などの可能性がある。
TypescriptのCompiler Optionsの一覧から選べるものを調べるようにする。
{
"compilerOptions": {
"lib": [
"es2015",
"dom"
]
}
}
JSXを有効にしていない
これはReact限定かもしれない。react
とreact-native
に分かれているので、間違わないようにする。
{
"compilerOptions": {
"jsx": "react"
}
}
デコレータを有効にしていない
デコレータは使おうとすると「この設定を有効にすること」と表示されるのですぐ気づける。(いつまでexperimental?)
{
"compilerOptions": {
"experimentalDecorators": true
}
}
@typesをインストールしていない
nodeでfs
が使えないなど、JavascriptライブラリをTypescriptで使おうとする場合に起きる。npm install @types/ライブラリ名
で必要な型情報をインストールしておき、tsconfig.json
のtypeRoots
を設定しておけば解決する。
{
"typeRoots": [
"node_modules/@types"
]
}