Reactjs 根据道具更改状态类型-React Typescript

Reactjs 根据道具更改状态类型-React Typescript,reactjs,typescript,use-state,Reactjs,Typescript,Use State,我有一个表单组件“AddBooking”,它采用以下道具: type AddBookingProps = { edit?: Booking }; 如果传入这个“编辑”属性,我想用设置的值呈现表单。如果未传入,它将成为“创建”空白表单。这就是我试图利用国家的方式 const [currentBooking, setBooking] = useState<NewBooking | Booking>( edit ? edit : emptyBooking ); 我在调用editBo

我有一个表单组件“AddBooking”,它采用以下道具:

type AddBookingProps = { edit?: Booking };
如果传入这个“编辑”属性,我想用设置的值呈现表单。如果未传入,它将成为“创建”空白表单。这就是我试图利用国家的方式

const [currentBooking, setBooking] = useState<NewBooking | Booking>(
  edit ? edit : emptyBooking
);
我在调用editBooking时遇到类型错误:

“NewBooking | Booking”类型的参数不能分配给“Booking”类型的参数。 类型“NewBooking”中缺少属性“\u id”,但类型“Booking”中需要属性“\u id”

你知道我怎样才能在没有“任何”类型的情况下解决这个问题吗?
非常感谢

这可能是一个类型防护装置的使用案例


您定义的一个函数,用于检查
\u id
是否实际位于类型上。这可能是一个很好的做法,因为您不希望用户在
NewBooking
中根据需要添加
\u id
并在
清空booking
中将
\u id
设置为0时编辑尚未存在的预订。非常感谢。对于正在阅读的其他人,上面的确切链接已被弃用,因此我在此处引用的新页面:。我将if(编辑)更改为if(currentBooking中的“\u id”)
if (edit) {
      bookingContext.editBooking(currentBooking);
      handleClose();
    } else {
      bookingContext.addBooking({
        ...currentBooking,
        bookedBy: uContext.user.username
      });
      handleClose();
    }