技術ブログ

プログラミング、IT関連の記事中心

TypeScriptの`readonly`使用ガイド

目次

TypeScriptのreadonly使用ガイド

TypeScriptでのreadonly修飾子の使用は、コードの安全性と可読性を向上させる強力なツールです。
この記事では、readonlyをいつ、どのような型に適用すべきかを解説します。

プリミティブ型にはreadonlyは不要

TypeScriptのプリミティブ型(例:number, string)は、自体が不変であるため、readonlyの使用は不要です。

// プリミティブ型の例
let myNumber: number = 10;
myNumber = 20; // これは新しい値を代入している

let myString: string = "Hello";
myString = "World"; // こちらも新しい文字列を代入している

この例では、myNumbermyStringに新しい値を代入しても、元の値は変更されません。
そのため、readonlyはここでは冗長です。

複合型にreadonlyを使用

複合型(例:オブジェクト、配列、Map)は変更可能です。
これらの型にreadonlyを適用することで、不変性を保証できます。

// 配列にreadonlyを適用する例
let myArray: readonly string[] = ["Apple", "Banana"];
myArray[0] = "Cherry"; // エラー: Index signature in type 'readonly string[]' only permits reading

// オブジェクトにreadonlyを適用する例
let myObject: { readonly id: number, name: string } = { id: 1, name: "John" };
myObject.id = 2; // エラー: Cannot assign to 'id' because it is a read-only property

このように、readonlyは複合型の要素やプロパティが関数内で変更されないことを保証するために有効に機能します。

結論

readonly修飾子の使用は、型の性質に応じて検討する必要があります。
プリミティブ型では通常不要ですが、複合型の場合、不変性を保証するために非常に有用です。
コードの安全性と明瞭性を高めるために、適切な場所でreadonlyを活用しましょう。

TypeScriptのreadonly使用に関するこのガイドが役立つことを願っています。
より堅牢で読みやすいコードを書くための一助となれば幸いです。