#5 TypeScriptで学ぶ条件分岐の基本
TypeScriptの条件分岐は、書き方自体はJavaScriptと同じですが、型の恩恵によってより安全に書けます。この記事では、TypeScriptにおける条件分岐の基本と、型ガードの活用方法を解説します。
if文の基本
let age: number = 20;
if (age >= 18) {
console.log("成人です");
} else {
console.log("未成年です");
}
JavaScriptと同様、if・else if・elseを使います。
型ガードという考え方
TypeScriptには「型ガード」という、if文を使って変数の型を絞り込むテクニックがあります。例えば、値が数値か文字列かわからない変数に対して、typeofを使ったif文で処理を分けることで、TypeScriptがそのブロックの中では型を正しく認識してくれるようになります。
function show(value: number | string) {
if (typeof value === "number") {
console.log(value.toFixed(2));
} else {
console.log(value.toUpperCase());
}
}
クラスの型ガードにはinstanceof
クラスのインスタンスかどうかを絞り込みたい場合は、typeofの代わりにinstanceofを使います。
class Dog { bark() { console.log("ワン"); } }
class Cat { meow() { console.log("ニャー"); } }
function makeSound(animal: Dog | Cat) {
if (animal instanceof Dog) {
animal.bark();
} else {
animal.meow();
}
}
switch文でも型ガードは効く
オブジェクトが持つ共通のプロパティ(判別可能なユニオン型)を使えば、switch文でも型ガードが機能します。
type Shape =
| { kind: "circle"; radius: number }
| { kind: "square"; size: number };
function area(shape: Shape): number {
switch (shape.kind) {
case "circle": return Math.PI * shape.radius ** 2;
case "square": return shape.size ** 2;
}
}
TypeScriptならではの注意点
型ガードを使わずに、複数の型を持つ可能性がある変数に対して特定の型専用の処理(例:文字列専用の機能)を呼び出そうとすると、TypeScriptがエラーを出して教えてくれます。これは、実行時に「その処理は存在しません」というエラーになる前に、書いている段階で気づける大きな利点です。
まとめ
TypeScriptの条件分岐はJavaScriptと同じ書き方をしつつ、型ガードによって型の絞り込みまで行えるのが特徴です。typeof・instanceof・判別可能なユニオン型を活用すると、より安全なコードが書けます。
本ページはプロモーションを含みます。
参考書籍(PR)
TypeScriptをもっと学びたい方には「プロを目指す人のためのTypeScript入門」がおすすめです。
PR
コードを書かずに自動化したい方へ
「学んだけど自分の作業に組み込む時間がない」という方向けに、ダブルクリックで動く Windows専用の自動化ツールをオーダーメイドで作成しています。気になる方は こちらをご覧ください。
コメント
コメントを投稿