您可以使用类型保护来检测联合类型的对象是否具有特定属性。具体来说,您可以使用in
运算符来检查对象是否具有某个属性。以下是一个示例:
interface Square {
kind: "square";
size: number;
}
interface Rectangle {
kind: "rectangle";
width: number;
height: number;
}
type Shape = Square | Rectangle;
function getArea(shape: Shape) {
if ("size" in shape) {
return shape.size * shape.size;
} else {
return shape.width * shape.height;
}
}
在上面的示例中,我们定义了一个Shape
联合类型,它可以是Square
或Rectangle
。在getArea
函数中,我们使用in
运算符来检查传入的对象是否具有size
属性。如果是Square
类型,则返回size * size
,否则返回width * height
。
本回答来自 ChatGPT。