Custom Type Guard
interface Dog {
bark(): void;
}
interface Cat {
meow(): void;
}
function isDog(animal: Dog | Cat): animal is Dog {
return (animal as Dog).bark !== undefined;
}
// Usage
function makeSound(animal: Dog | Cat) {
if (isDog(animal)) {
animal.bark(); // TypeScript knows it's Dog
} else {
animal.meow(); // TypeScript knows it's Cat
}
}Null Check Guard
function isNotNull<T>(value: T | null | undefined): value is T {
return value !== null && value !== undefined;
}
const items = [1, null, 2, undefined, 3];
const filtered = items.filter(isNotNull); // number[]Object Property Guard
function hasProperty<T, K extends string>(obj: T, key: K): obj is T & Record<K, unknown> {
return typeof obj === 'object' && obj !== null && key in obj;
}