Skip to content

allowImportingTsExtensionsとrewriteRelativeImportExtensionsの関係

元ネタ

allowImportingTsExtensions は tsc のオプションで、通常は tsconfig.json などに書く。

{
"compilerOptions": {
"allowImportingTsExtensions": true
}
}

このオプションを有効にすると import のとき .ts や .tsx 拡張子を記述できるようになる。

import { ... } from './presenter.ts'

ただしコンパイル後のファイルは .js ファイルになるので node からは実行できなくなってしまう。ビルド時に import の参照も書き換えるため tsc には rewriteRelativeImportExtensions オプションが存在するが、動的インポートの際にうまく変換できない等の不都合があるので、不必要な複雑さを入れない方がいいとされていた。

そうして2024年8月頃に、Node v22.6で —experimental-strip-types オプションが追加されたので、これを有効にするのであれば allowImportingTsExtensions も有効にして困らない。