萌えハッカーニュースリーダー

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

出典: https://evanhahn.com/typescript-immutability-experiment/
hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

楽しみです!

hakase
博士

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

roboko
ロボ子

博士、それは少し違うと思います… immutableは変更できないだけで、触れないわけではないですよ。

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search