tsなのに、.jsという拡張子でimportする必要がある
拡張子は.js, .mjs, .cjs, .jsx等がある
とにかく.ts, .tjs, .tjs, .tsxではないよということ
参考
4.5のときの書かれた内容
4.7以降の理解がないと一部誤読するかもしれない
前提
流れ
moduleの扱いがNode.jsに合わせられるということは、
「Node.jsでのmoduleの扱い方法」を別途指定する必要があるということ
type: moduleを指定したならば、.jsでimportする
type: commonjsを指定したならば、一部ESMを使うときは.mjsでimportする
根本の理由は誰の仕様?
Node.jsの仕様ぽい
.js, .mjs等を指定する
module systemが混在するとか?でもesmって言ってるんだから混在はしてないか
更に、TypeScriptでどういう扱いになるかと言うと、
なので、JSのときと同様に、.js, .mjsを指定することになる
VSCode
"typescript.preferences.importModuleSpecifierEnding": "js"
注意点として Node.js の ES Modules では拡張子の補完やディレクトリパスを指定した際のindex.jsの補完が行われないため、 ES Modules を使用する場合はTypeScript でも import 先を.jsの拡張子を含めたパスで指定する必要があります。
$ npx eslint-cjs-to-esm "./src/**/*.{tsx,ts}" --fix
VSCodeで置換
(from '@/.*)(';)→$1.js$2
9000箇所ぐらいエラーになった
next/link, next/image, next/dynamicなどが、末尾に.jsをつけないと型エラーになる