TypeScriptの型ガードを活用して安全なコードを書く方法
概要
TypeScriptの型ガードは、実行時に型情報を利用して特定の型を絞り込み、安全なコードを書くための重要な手法です。これにより、型の不整合やエラーを事前に防ぐことができます。この技術は、コードの信頼性を高め、開発効率を向上させるのに役立ちます。
サンプルコード
type Animal = { name: string };
type Dog = Animal & { bark: () => void };
type Cat = Animal & { meow: () => void };
function isDog(animal: Animal): animal is Dog {
return (animal as Dog).bark !== undefined;
}
function makeSound(animal: Animal) {
if (isDog(animal)) {
animal.bark();
} else {
animal.meow();
}
}
解説
上記のコードでは、`isDog` 関数を使って `Animal` 型を `Dog` 型に絞り込んでいます。これにより、`makeSound` 関数内で安全に `bark` メソッドを呼び出すことができます。型ガードを使うことで、実行時エラーを事前に防ぎ、コードの安全性を確保します。
応用例・バリエーション
// 複数の型ガードを組み合わせる
function isCat(animal: Animal): animal is Cat {
return (animal as Cat).meow !== undefined;
}
function makeSound(animal: Animal) {
if (isDog(animal)) {
animal.bark();
} else if (isCat(animal)) {
animal.meow();
}
}
ベストプラクティス
- 型ガードを使って安全性を高める
- 型の絞り込みができる箇所で可能な限り型ガードを活用する
- ユニオン型などで複数の型を扱う際に型ガードを適切に使用する
関連技衎・参考情報
- TypeScript Handbook: [Advanced Types](https://www.typescriptlang.org/docs/handbook/advanced-types.html)
- TypeScript Deep Dive: [Type Guards](https://basarat.gitbook.io/typescript/type-system/typeguard)