はじめに
この記事は【Type Guard】についての備忘録である。
【Type Guard】についてとは
- 条件ブロック内のオブジェクトの型を制限することができる
- 【Type Guard】は3つの演算子が存在する
1. typeof演算子
typeof
演算子は、typeof 式
のような形で式を評価し、その評価結果に応じて以下表「結果」のような文字列を返す- ユニオン型に対して、型のチェックを行い、処理の分岐が可能
- JavaScriptの世界の型定義しか扱えない
- 式が
null
の場合に、”object"
を返すというイレギュラーな動きをする
型 | 結果 |
undefined | ‘undefined’ |
Null | ‘object’ |
論理値 | ‘boolean’ |
Number | ‘number’ |
BigInt | ‘bigint’ |
文字列 | ‘string’ |
シンボル | ‘symbol’ |
関数 | ‘function’ |
その他のオブジェクト | ‘object’ |
// サンプルコード
function numberToStirng(value: string | number) {
if (typeof value === "number") {
return value.toString();
}
return value;
}
2. instanceof演算子
- 特定のクラスのインスタンスかどうかをチェックして処理の分岐が可能
// サンプルコード
function getMonth(date: string | Date) {
if (date instanceof Date) {
console.log(date.getMonth() + 1);
}
}
3. in演算子
値 in オブジェクト
のような形で、値
が、オブジェクト
のプロパティかどうかを判定し、その真偽値を返す
// サンプルコード
type Dog = {
bow: () => void;
};
type Cat = {
myao: () => void;
};
const dog: Dog = {
bow: () => console.log("bow")
};
const cat: Cat = {
myao: () => console.log("myao")
};
const pet = (pet: Dog | Cat) => {
if ("bow" in pet) {
dog.bow();
} else {
cat.myao();
}
};
コメント