Open3
JavaScript / TypeScript 学習メモ
Readonly型の定義について
typeofとkeyof
ジェネリクス
ジェネリクスは、プログラミングにおいて「型を抽象化」する仕組み。
具体的な特徴と目的
-
型の柔軟性
ジェネリクスを使うと、特定の型に依存しないコードを記述できます。たとえば、配列やリストの操作、データの変換など、どんな型に対しても同じロジックを適用できる場合に便利です。 -
型安全性
型を抽象化しつつも、利用時には具体的な型を指定するため、コンパイル時に型チェックを行えます。これにより、ランタイムエラーを減らすことができます。
使用例
型パラメータ(<T>
など)を用いて定義します。
配列の例
function identity<T>(value: T): T {
return value;
}
const result1 = identity<string>("Hello"); // string型
const result2 = identity<number>(42); // number型
-
T
は「型を抽象化するためのプレースホルダー」で、呼び出し時に具体的な型が渡されます。
クラスでの例
class Box<T> {
private contents: T;
constructor(contents: T) {
this.contents = contents;
}
getContents(): T {
return this.contents;
}
}
const stringBox = new Box<string>("Book");
const numberBox = new Box<number>(100);
配列フィルターの汎用関数
function filterArray<T>(array: T[], predicate: (value: T) => boolean): T[] {
return array.filter(predicate);
}
const numbers = [1, 2, 3, 4];
const evenNumbers = filterArray(numbers, (n) => n % 2 === 0); // [2, 4]
メリット
- 再利用性: 同じロジックをさまざまな型に適用できる。
- 型安全性: 型推論により誤った型の使用を防ぐ。
- 可読性: 抽象化した型を明示することで、コードの意図が伝わりやすくなる。