前回の記事では、TypeScriptのジェネリクスとデコレータについて基本的な使い方を説明しました。今回は、より高度な使い方を紹介します。
【目次】
- TypeScript入門:型定義の基本と使い方
- TypeScript実践1:ジェネリクスとデコレータの使い方
- TypeScript実践2:高度なジェネリクスとデコレータの使い方(←今ここ)
- TypeScript実践3:インターセクション型とユニオン型
- TypeScript実践4:コンディショナル型
- TypeScript実践4:高度なデコレータの活用法
ジェネリクスにおける条件型の利用
TypeScriptでは、型に対して条件を指定することができます。この条件型を使うことで、特定の型に制限を加えたり、型を変換したりすることができます。
例えば、以下のような型を考えます。
type MyType<T> = T extends string ? string : number;
この型は、Tがstring型を継承している場合にはstring型を返し、
そうでない場合にはnumber型を返します。
これを使うことで、以下のような関数を作成することができます。
function myFunction<T>(value: T): MyType<T> {
if (typeof value === "string") {
return "string";
} else {
return 0;
}
}
この関数は、引数の型に応じてstring型またはnumber型を返します。
デコレータファクトリの利用
デコレータは、クラスやメソッドなどに対して実行時に何らかの処理を行うための仕組みですが、デコレータ自体にもパラメータを渡すことができます。このパラメータを使って、動的な処理を行うことができます。
例えば、以下のようなデコレータファクトリを考えます。
function myDecoratorFactory(param: string) {
return function(target: any, propertyKey: string, descriptor: PropertyDescriptor) {
console.log(param);
descriptor.value();
};
}
このデコレータファクトリは、引数に渡された文字列をログ出力し、その後にデコレートされたメソッドを実行します。
これを以下のように使うことができます。
class MyClass {
@myDecoratorFactory("Hello, world!")
myMethod() {
console.log("myMethod is called.");
}
}
このように、デコレータファクトリを使うことで、動的な処理を行うことができます。
以上、TypeScriptのジェネリクスとデコレータの高度な使い方について紹介しました。これらの機能を駆使して、より堅牢なコードを書くことができるようになりましょう。