条件分岐内で型を絞り込む。以降のブロックで型安全なコードを書ける
// ── typeof: プリミティブ型を確認する ────────────────────
function format(value: string | number): string {
if (typeof value === 'number') {
// この {} ブロック内では value が number 型として扱われる
return value.toFixed(2);
}
// ここでは value が string 型として扱われる
return value.toUpperCase();
}
// ── instanceof: クラスインスタンスを確認する ─────────
function handleError(error: unknown) {
if (error instanceof Error) {
// Error インスタンスなら .message が使える
console.error('エラーメッセージ:', error.message);
} else {
console.error('不明なエラー:', error);
}
}
// ── カスタム型ガード: val is Type の形式 ─────────────
// 「この条件が true なら User 型」と TypeScript に教える
type User = { name: string; age: number };
function isUser(val: unknown): val is User {
return typeof val === 'object' && val !== null
&& 'name' in val && 'age' in val;
}
const data: unknown = { name: '田中', age: 25 };
if (isUser(data)) {
// ここでは data が User 型として扱われる
console.log(data.name); // '田中'
}typeof・instanceof・in演算子も型ガードとして機能する。ユーザー定義型ガードはv is Tの形で戻り値型を宣言する。