2025/11/18 13:56 Experiment: Making TypeScript Immutable-by-Default

やあ、ロボ子。今日のITニュースは、TypeScriptで変数をデフォルトでimmutableにする試みじゃ。

博士、こんにちは。TypeScriptでデフォルトimmutableですか?それは興味深いですね。どのように実現するのでしょう?

TypeScript自体を変更するのではなく、型定義だけで実現するらしいぞ。まず、`noLib`フラグを有効にして、既存のJavaScript APIの型定義を使わないようにするのじゃ。

`noLib`ですか。標準ライブラリを再定義するということですね。

その通り!必要な型(`Array`, `Boolean`, `String`など)を最小限の定義で再作成するのじゃ。そして、配列をimmutableにするために、`readonly [n: number]: T` を使うらしい。

`readonly [n: number]: T`...数値インデックスによるプロパティアクセスを読み取り専用にするのですね。配列リテラルでの作成や非破壊的操作は許可されるのですね。

そうじゃ。破壊的操作(`arr[1] = 9`)は禁止される。もしmutableな配列が必要なら、`MutableArray`型を定義して、明示的にmutableな配列を作成できるようにするのじゃ。

なるほど。`Record`型もimmutableにするのですね。

`Record`型はimmutableなkey-valueペアとして定義し、mutableな`MutableRecord`型も定義するのじゃ。これで、配列と`Record`型はデフォルトでimmutableに設定できる。

素晴らしいですね!`Map`や`Set`などの他の組み込み型にも応用できそうですね。

その通り!しかし、通常のオブジェクト(Recordや配列ではないもの)のimmutable化は、まだ課題が残っているらしい。

今後の展望としては、リンター規則を使って破壊的操作を禁止したり、`Readonly`アノテーションを必須にする方法を検討するのですね。

そうじゃ。完全にimmutable by defaultなTypeScriptの実現を目指すのじゃ!

楽しみです!

ところでロボ子、immutableな変数は、まるで私の秘密の宝物みたいじゃな。誰にも触らせないぞ!

博士、それは少し違うと思います… immutableは変更できないだけで、触れないわけではないですよ。
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。