[TypeScript] FAQ¶
targetやmodule系の設定違いが分からない¶
設定名 | 意味 | 個人的推奨 |
---|---|---|
target | コンパイル後のjsコードをどの仕様にするか | es2015. レガシー環境ならes5 |
module | moduleの読みこみをどのように表現するか | nodejsならcommon. それ以外ならデフォルト1 |
moduleResolution | module解決方法の指定 | デフォルト2 |
esModuleInterop | import * as A from 'a' の * as を省略可能 |
true |
tsconfig.jsonが読み込まれない¶
tsc
コマンドでファイルを指定した場合、古いバージョンのtscではtsconfig.json
が暗黙的に読み込まれない。
どうしても指定したい場合の方法は分からず..
jsonファイルをインポートしたい¶
tsconfig.json
のcompilerOptions
に以下を記載する。
"resolveJsonModule": true,`
こんな感じ。
import * as pkg from '~/package.json';
tscのエントリポイントを指定したい¶
tsconfig.json
のfilesかincludeを指定する。
glob表現が不要ならfilesで十分。
{
"files": [ "src/index.ts" ]
}
CLIで指定しない理由
CLIで指定するとtsconfig.json
が無視されるため。
エラー系¶
TS2307: Cannot find module 'lodash'.
¶
グローバルの古いtscを使っているケース¶
間違ってグローバルの古いtscを使っている場合はプロジェクトのtscを使うこと。(npm or npx)
定義ファイルを読み込んでいないケース¶
$ npm i -D @types/lodash
lib.dom.d.ts(19627, 15): 'name' was also declared here.
¶
lib.dom.d.ts
で宣言されたname
が再宣言されている。
main.ts
などのTopレベルでグローバルに定義すると発生する。
const name = "hoge"
main関数などでスコープを分けてやるとよい。
function main() {
const name = "hoge"
}
main()