什么是类型的后卫?
类型的守卫是打字稿构造,可让您在特定代码块中完善或缩小值的类型。在处理工会类型或未知值时,它们特别有用。
typeof
打字稿中最简单的类型保护是typeof
检查。您可能会用它来区分原始类型。
function logValue(value: string | number) {
if (typeof value === 'string') {
console.log('This is a string:', value);
} else {
console.log('This is a number:', value);
}
}
instanceof
使用课程和继承时,instanceof
是您的首选守卫。
class Animal {
move() {
console.log('Moving... 🚶♂️');
}
}
class Bird extends Animal {
fly() {
console.log('Flying... 🦅');
}
}
function moveAnimal(animal: Animal) {
if (animal instanceof Bird) {
animal.fly();
} else {
animal.move();
}
}
类型的后卫和工会
工会是类型相关问题的常见来源。键入后卫可以帮助确保您的代码优雅地处理工会类型。
type Result = { success: true; value: number } | { success: false; error: string };
function processResult(result: Result) {
if (result.success) {
console.log('Value is', result.value);
} else {
console.error('Error:', result.error);
}
}
具有自定义属性
处理可能具有特定属性的对象时,in
运算符很方便。
interface Car {
brand: string;
speed: number;
}
function isFast(car: Car | { name: string }): car is Car {
return 'speed' in car;
}
使用typeof
和instanceof
类型的后卫可以合并以有效处理复杂情况。
function processInput(input: string | number | Animal) {
if (input instanceof Animal) {
input.move();
} else if (typeof input === 'string') {
console.log('You entered a string:', input.toUpperCase());
} else {
console.log('You entered a number:', input.toFixed(2));
}
}