isolatedDeclarations
GPT-4.icon
🔹 --isolatedDeclarations とは?
TypeScript に --isolatedDeclarations を指定すると、
各ファイルが単体で .d.ts 化できるかどうかをチェックします
足りない型注釈があるとエラーを出します(型推論に頼らない)
ただし、export されないローカル変数などはチェック対象外です
code:ts
const local = add(); // OK: export してないので型注釈いらない
export function foo(): string {
return local;
}
✅ メリット
外部ツールが .d.ts を高速生成しやすくなる
並列ビルドのための前提条件になる
TypeScript が補完やクイックフィックスで型注釈を提案してくれる
⚠️ 注意点・デメリット
--isolatedDeclarations だけでは .d.ts 出力されません → --declaration も必要
今の TypeScript はまだ全ケースをサポートしていない(例:computed property)
コードを書くときに export するものへ明示的な型を書く必要がある(ちょっと面倒)
たとえば以下のようなコードがあるとします:
code:util.ts
export let one = "1";
export let two = "2";
code:add.ts
import { one, two } from "./util";
export function add() { return one + two; }
この add 関数の戻り値の型は "1" + "2" → string ですが、TypeScript はそれを自動で推論します。
つまり .d.ts を出すには:
add.ts の中身を見る
one や two の型を確認するために util.ts も読む
推論して型定義ファイルを出す
という処理が必要です。これが重くて遅い原因です。
用途①:高速な型定義生成ツールが作れない問題
高速な TS→JS 変換ツールは多くありますが、TS→.d.ts 変換は難しいです。
型推論をまるっと実装し直さないといけないからです。
用途②:並列ビルドが難しい
たとえば monorepo に以下のような依存関係がある場合:
code:_
core
├── frontend
└── backend
TypeScript は core の .d.ts を先に生成しないと、frontend や backend の型チェックが始められません。
結果として、並列ビルドできずボトルネックになります。
解決策:export されるものに明示的に型を書く
ポイントはこれ:
.d.ts に必要なのは「export される API の型情報」だけ。
つまり、export する関数や変数に型注釈を付けておけば、型推論しなくても .d.ts を生成できる!
悪い例(エラーになる):
code:ts
export function foo() {
return x;
}
// エラー:戻り値の型が明示されていないので、--isolatedDeclarations で怒られる
良い例(OK):
code:ts
export function foo(): string {
return x;
}