收到错误“字符串类型为”参数 |undefined' 不能分配给 type 的参数”

getting error "Argument of type 'string | undefined' is not assignable to parameter of type"

提问人:user5711656 提问时间:11/15/2023 最后编辑:user5711656 更新时间:11/15/2023 访问量:67

问:

我收到以下错误“字符串类型的参数 |undefined' 不可分配给类型的参数“我不知道如何解决该错误。这是我的代码

  export interface IDropDown {
  label: string;
  value: string;
}
export enum BOOKING_TYPE {
  FC = 'FC',
  LC = 'LC',
  TUFFING = 'TUFFING',
}
  export interface IImportBookingData {
      booking_type: IDropDown | null;
  }
  let bookingData: IImportBookingData;
  const iscl = [BOOKING_TYPE.LC, BOOKING_TYPE.TUFFING].indexOf(bookingData?.booking_type?.value) !== -1;

  console.log(iscl)

code 链接

https://www.typescriptlang.org/play?ssl=17&ssc=1&pln=1&pc=1#code/ATCmA8AcHsCcBdgEsB29SwGYEMDGpgBJAEVmkmOgHcVgBvAWACgQAbbAI1FYC5gBneLFQBzANzMQAN2ysArqD6DhKccwC+zCDARgUcgLbAAQgHlTAaUIA5AOIB9ACoBNAAoBRepOAAxAMLAALzAAOT+IQA03gAyAcEhsZHejgCqPj42tkGhqemZSUyaLGBQcIio6Fh4BISEBjrwxtDQANaixNjw2F7FICAczW2q9vAAnpCKRKTklDTAAD7A+qysEsVFbKCIA63tndh8tfVlTbuqHV1rILjQKILI-Lis2QDaZpaZTm7uAHSxESZzFY7F8PD9chk7ABdH6oAAmEFMmAAFDshiILtgAPw-NGiEbjUA4mTyUAASmAAEJAsEALQARjW3hud2grFAP1Y0BEyKQj1YZOYQA

任何想法 ?

enter image description here

javascript reactjs typescript javascript 对象

评论


答:

0赞 Jithil P Ponnan 11/15/2023 #1

类型定义为 。但是,后来您正在访问内部的道具。booking_typeIDropDownvaluebooking_typeindexOf

在这里,是,它将显示类型错误。要克服这个问题,您需要键入强制转换值。valuestring

const iscl = [BOOKING_TYPE.LC, BOOKING_TYPE.TUFFING]
   .indexOf((bookingData?.booking_type?.value) as BOOKING_TYPE) !== -1;

这里将注意类型转换错误。as BOOKING_TYPE

0赞 KanhaJi 11/15/2023 #2
export enum BOOKING_TYPE {
  FC = 'enumFC',
  LC = 'LC',
  TUFFING = 'TUFFING',
}
export interface IDropDown {
  label: string;
  value: BOOKING_TYPE; // value should be of type BOOKING_TYPE
}
export interface IImportBookingData {
    booking_type: IDropDown;
}
// assing value first
let bookingData: IImportBookingData = {
  booking_type: 
  {label:"hello", value: 'LC'}
};

const iscl = [BOOKING_TYPE.LC, BOOKING_TYPE.TUFFING]
                     .indexOf(bookingData.booking_type.value) !== -1;

console.log(iscl)

还要检查此解决方案

// export enum BOOKING_TYPE {
//   FC = 'enumFC',
//   LC = 'LC',
//   TUFFING = 'TUFFING',
// }

export type BOOKING_TYPE = "enumFC" | "LC" | "TUFFING";

export interface IDropDown {
  label: string;
  value: BOOKING_TYPE;
}
export interface IImportBookingData {
    booking_type: IDropDown;
}
// assing value first
let bookingData: IImportBookingData = {
  booking_type: 
  {label:"hello", value: 'LC'}
};

// const iscl = [BOOKING_TYPE.LC, BOOKING_TYPE.TUFFING]
//                     .indexOf(bookingData.booking_type.value) !== -1;
const iscl = ["LC", "TUFFING"].indexOf(bookingData.booking_type.value) !== -1;

console.log(iscl)

希望这能解决您的问题。

评论

0赞 Community 11/15/2023
您的答案可以通过额外的支持信息得到改进。请编辑以添加更多详细信息,例如引文或文档,以便其他人可以确认您的答案是正确的。您可以在帮助中心找到有关如何写出好答案的更多信息。