reactjs - ionic react : How to properly type (typescript) event object parameter in delegated anonymous onIonChange event handler

标签 reactjs typescript ionic-framework

我正在使用表单验证库(react-hook-form),其中我需要使用包装器组件(称为 Controller )来控制输入。

            <Controller
              render={({ onChange, onBlur, ...rest }) => (
                <IonCheckbox
                  {...rest} 
                  slot="start"
                  //@ts-ignore
                  onIonChange={(e) => onChange(e.target.checked)}
                  onIonBlur={onBlur}
                />
              )}
              control={control}
              rules={{
                required: { value: true, message: "this required" },
              }}
            />

目前我让编译器忽略输入错误,因为我尝试了几件事但没有成功:

<强>1。我认为肯定会起作用:

onIonChange={(e: React.ChangeEvent<HTMLInputElement>) => onChange(e.target.checked)}

给了我一个问题:

类型“(e: React.ChangeEvent) => void”不可分配给类型“(event: CustomEvent) => void”。 参数“e”和“event”的类型不兼容。 类型“CustomEvent”缺少类型“ChangeEvent”中的以下属性:nativeEvent、isDefaultPrevented、isPropagationStopped、persistts(2322) Components.d.ts(3680, 9):预期类型来自属性“onIonChange”,该属性在类型“IntrinsicAttributes & IonCheckbox & Pick

<强>2。根据错误消息,我尝试了以下操作:

onIonChange={(e: CustomEvent<CheckboxChangeEventDetail> => onChange(e.target.checked)}

这给出了更简洁的错误:

找不到名称“CheckboxChangeEventDetail”.ts(2304)

<强>3。用这个捕获吸管

onIonChange={(e: EventEmitter<CheckboxChangeEventDetail>) => onChange(e.target.checked)}

这会产生一些错误:

类型“EventEmitter”不是 generic.ts(2315) 找不到名称“CheckboxChangeEventDetail”。

我已经遇到过几次这样的问题,现在的 @ts-ignore 评论比我能接受的还要多。 有人知道如何用 typescript 正确输入这个吗?

最佳答案

您只需添加接口(interface)即可...

export interface CheckboxChangeEventDetail {
  value: any;
  checked: boolean;
}

然后设置代码

<IonItem>
  <Controller
    render={({ onChange, onBlur }) => (
      <IonCheckbox
        onIonChange={(e: CustomEvent<CheckboxChangeEventDetail>) => {
          onChange(e?.detail.checked);
          console.log(e);
        }}
        onIonBlur={onBlur}
      />
    )}
    control={control}
    defaultValue={false}
    name="saveInfo"
    rules={{
      required: false,
    }}
  />
</IonItem>

关于reactjs - ionic react : How to properly type (typescript) event object parameter in delegated anonymous onIonChange event handler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63077247/

相关文章:

javascript - Uncaught ReferenceError : exports is not defined using reactjs

javascript - 使用类将 JSON 对象转换为 typescript 类型变量的正确方法?

Angular 7 HttpHeaders 是空的

javascript - 带 ionic 切换而不是按钮的 ionic 输入插件

javascript - 在不使用 ng-click 的情况下使用 Ionic + Cordova + AngularJS 显示联系人列表

javascript - React Router 无法解析模块

javascript - map 功能错误: Cannot read property 'map' of undefined in Reactjs

javascript - 如何在Firestore中不断地将对象添加到嵌套集合中

typescript - 使用 VS Code 和 webpack-dev-server 进行调试时断点不起作用

javascript - ionic react ,滚动到特定列表项