不使用类型守卫时,可以使用其他方式对对象进行类型检查,例如使用类型断言或使用类型判断函数。
使用类型断言:
interface Circle {
radius: number;
}
interface Square {
sideLength: number;
}
function calculateArea(shape: Circle | Square): number {
if ((shape as Circle).radius) {
return Math.PI * (shape as Circle).radius ** 2;
} else if ((shape as Square).sideLength) {
return (shape as Square).sideLength ** 2;
} else {
throw new Error("Invalid shape");
}
}
const circle: Circle = { radius: 5 };
console.log(calculateArea(circle)); // Output: 78.53981633974483
const square: Square = { sideLength: 5 };
console.log(calculateArea(square)); // Output: 25
使用类型判断函数:
interface Circle {
radius: number;
}
interface Square {
sideLength: number;
}
function isCircle(shape: Circle | Square): shape is Circle {
return (shape as Circle).radius !== undefined;
}
function calculateArea(shape: Circle | Square): number {
if (isCircle(shape)) {
return Math.PI * shape.radius ** 2;
} else {
return shape.sideLength ** 2;
}
}
const circle: Circle = { radius: 5 };
console.log(calculateArea(circle)); // Output: 78.53981633974483
const square: Square = { sideLength: 5 };
console.log(calculateArea(square)); // Output: 25
这些方法虽然没有使用类型守卫,但仍然可以对对象进行类型检查和类型转换。但是需要注意的是,使用类型守卫可以提供更好的类型推断和代码可读性。