推荐答案
typeof 类型保护
typeof 类型保护用于在 TypeScript 中判断变量的基本类型。它通常用于判断 string、number、boolean、symbol、undefined、object 和 function 等基本类型。
function printValue(value: string | number) {
if (typeof value === "string") {
console.log("String value: " + value);
} else {
console.log("Number value: " + value);
}
}instanceof 类型保护
instanceof 类型保护用于判断一个对象是否是某个类的实例。它通常用于判断自定义类的实例。
// www.javascriptcn.com code example
class Animal {
name: string;
constructor(name: string) {
this.name = name;
}
}
class Dog extends Animal {
bark() {
console.log("Woof!");
}
}
function printAnimal(animal: Animal) {
if (animal instanceof Dog) {
animal.bark();
} else {
console.log("Animal name: " + animal.name);
}
}in 类型保护
in 类型保护用于判断一个对象是否包含某个属性。它通常用于判断对象是否具有某个特定的属性。
// www.javascriptcn.com code example
interface Bird {
fly(): void;
}
interface Fish {
swim(): void;
}
function move(pet: Bird | Fish) {
if ("fly" in pet) {
pet.fly();
} else {
pet.swim();
}
}自定义类型保护
自定义类型保护是通过定义一个返回类型谓词(parameterName is Type)的函数来实现的。它允许你编写更复杂的类型判断逻辑。
// www.javascriptcn.com code example
function isFish(pet: Bird | Fish): pet is Fish {
return (pet as Fish).swim !== undefined;
}
function move(pet: Bird | Fish) {
if (isFish(pet)) {
pet.swim();
} else {
pet.fly();
}
}本题详细解读
typeof 类型保护
typeof 类型保护是 TypeScript 中最简单的类型保护之一。它通过检查变量的类型来缩小变量的类型范围。typeof 只能用于基本类型,不能用于判断对象或自定义类型。
instanceof 类型保护
instanceof 类型保护用于判断一个对象是否是某个类的实例。它通过检查对象的原型链来判断对象是否属于某个类。instanceof 只能用于判断类的实例,不能用于判断接口或基本类型。
in 类型保护
in 类型保护通过检查对象是否包含某个属性来判断对象的类型。它适用于判断对象是否具有某个特定的属性,通常用于联合类型的场景。
自定义类型保护
自定义类型保护允许你编写更复杂的类型判断逻辑。通过定义一个返回类型谓词的函数,你可以在函数内部实现任意的类型判断逻辑,并在函数外部使用该函数来缩小变量的类型范围。自定义类型保护非常灵活,适用于各种复杂的类型判断场景。