您可以使用类型保护来检测联合类型的对象是否具有特定属性。具体来说,您可以使用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联合类型,它可以是SquareRectangle。在getArea函数中,我们使用in运算符来检查传入的对象是否具有size属性。如果是Square类型,则返回size * size,否则返回width * height

本回答来自 ChatGPT。