tsconfig.jsonesModuleInteropプロパティは、ES Modulesと他のモジュールシステムを共用する際に使う。なお、"interop"は相互運用という意味の英単語である。

esModuleInteropプロパティ

JavaScriptには、ES Modulesという標準のモジュールシステムがある。ただ、ES Modulesが生まれるまでにNode.jsで発展したいくつかのモジュールシステム(CommonJS、AMD、UMDなど)があり、これらはまだ現役で使われている。というか、ES Modulesに置き換わっている最中という状況だ。

で、JavaScriptコードの諸々の静的チェックを担うTypeScriptには、これらのモジュールシステムの混在をいい感じに吸収するかエラーとして拒絶するかを選べるオプションがある。それがesModuleInteropである。

デフォルト値の動作

esModuleInteropfalse、あるいは未指定の場合、TypeScriptはCommonJS/AMD/UMDモジュールをES Modulesと同様に扱う。

ただしこれだと、名前空間インポートで関数オブジェクトをインポートできたり、何やらモジュール間の互換がうまくいかない問題(よくわかりませんでした)が発生する。

trueにした時の動作

esModuleInteroptrueを指定すると、TypeScriptは内部でヘルパー関数を生成したりあれやこれやして、モジュール間の互換がうまいこといくようにしてくれる。

ので、基本このプロパティにはtrueを指定しておくのが無難と言える。

参考資料

TypeScript: TSConfig Reference – Docs on every TSConfig option