TypeScriptにおいて、ジェネリック型とextends
キーワードは非常に強力な機能です。これらを組み合わせることで、柔軟性のあるコードを書くことができます。ジェネリック型は、異なるデータ型に対して汎用的なコードを書くための仕組みであり、extends
キーワードは型パラメータに対する条件を指定するために使用されます。
ジェネリック型の基本
まず、ジェネリック型の基本を理解しましょう。ジェネリック型は、関数やクラスを作成する際に、特定の型を指定せずに、後から利用されるコンパイル時に型が決まるようにします。例えば、以下はジェネリック型を使用した単純な関数の例です。
function identity<T>(arg: T): T {
return arg;
}
let result = identity<string>("Hello, TypeScript!");
console.log(result); // 出力: Hello, TypeScript!
この例では、identity
関数がジェネリック型T
を使用しています。関数を呼び出す際に、具体的な型(ここではstring
)を指定することで、その型に応じた結果が得られます。
extendsキーワードの活用
次に、extends
キーワードを使ってジェネリック型に制約を加える方法を見てみましょう。これは、特定の型やそのサブタイプに制限をかける場合に便利です。
interface Lengthy {
length: number;
}
function getLength<T extends Lengthy>(arg: T): number {
return arg.length;
}
let lengthOfString = getLength("Hello, TypeScript!");
console.log(lengthOfString); // 出力: 18
この例では、Lengthy
というインターフェースを定義し、その長さを持つオブジェクトに対して制約を設けています。そして、getLength
関数ではextends Lengthy
と指定することで、引数の型がLengthy
インターフェースを満たす必要があります。
extends
キーワードは、単なる型パラメータの拡張を超えて、より洗練された型制約を設ける際にも使用されます。これにより、安全で柔軟なコードを構築することが可能です。
TypeScriptのジェネリック型とextends
キーワードを組み合わせることで、より堅牢で再利用可能なコードを作成する手助けとなります。これらの機能をマスターすることで、型安全性を向上させつつ、柔軟性のある開発が可能となります。