tsconfigのmodule
compile後のJavaScriptのModule Systemの形式の指定
import/require()などのmodule部分の構文に関してのみの話
docs
TypeScript: Documentation - Modules - Theory
TypeScript: Documentation - Modules - Reference
以下の2つはやや特殊
module: node16
module: nodenext
2024/4現在はmodule: node16と同じ
node: preserve
https://www.typescriptlang.org/tsconfig#preserve
importとrequireを併用できる
いつ必要になるのだろう
https://www.typescriptlang.org/docs/handbook/modules/reference.html#preserve
何を指定すればよいのか?
tsconfig/basesでtarget、module、libを参考にするを参考にすればいい
tsconfigのmoduleは2022年頃から徐々に複数の責務を持つようになり複雑化している
TypeScriptのmoduleオプションの話、あるいはTypeScript開発者の苦悩、あるいはCJSとESMの話
以前までは、import/require()などのmodule部分の構文に関してのみの話だったが、
module: node16などが増えてからは、ランタイムでどう扱うかという意味が増えている
歴史的経緯があって仕方ないとは言え、かなりカオスだ...mrsekut.icon
#WIP
古いmoduleを指定するとcompile errorになることがある
例えば、Top-Level Awaitを使用しているのに、es2022やnode16以前のものを指定するとエラーになる