📦
TypeScript Compiler の isolatedModules オプションとは
TypeScript のコードを扱うにあたって、 TypeScript Compiler (TSC) 以外のトランスパイラに配慮するためのものである。
TSC 以外のトランスパイラは、往々にして一度にひとつのファイルのみ扱うので、完全な型システムの理解はない。
このため、const enum
や namespace
を正しく扱えない可能性がある。
isolatedModules
オプションを有効にすると、シングルファイルでの変換で正しく扱えない可能性のあるコードについて、警告を出す。
フラグが有効のときに使えないコード
値のない型の export
TSC では、ある型が実態のない(型情報しかない)場合、javaScriptでは export
の対象から省く。
example1.ts
import { someType, someFunction } from "someModule";
someFunction();
export { someType, someFunction };
example1.js
export { someFunction };
トランスパイラは型が値を生成するか判断できない。よって、型のみを export
するとエラーとする。
モジュールじゃないコード
example2.ts
function fn() {}
すべてのコードをモジュールにすることが求められるので、何らかの import
/ export
をするか、空の export
を埋め込む必要がある。
const enum
を使っているコード
example3.ts
declare const enum Numbers {
Zero = 0,
One = 1,
}
console.log(Numbers.Zero + Numbers.One);
これは、変換後に実際の値へ置き換えられる。
example3.js
"use strict";
console.log(0 + 1);
シングルファイルのトランスパイルでは、このように(特に他のァイルで定義されたconstなどの)参照を置き換えられない。
よって、エラーとさせる。
References
Links
- TSC 以外のトランスパイラを使うので、 TSC 自体にはファイルを出力させないようにするとよい
Discussion