制作自定义 SaveButton 时如何在 handleSubmitWithRedirect 上正确输入?

How can I get correct typing on handleSubmitWithRedirect when making custom SaveButton?

我需要一个在视觉上与普通按钮截然不同的保存按钮,因此我选择基于 SaveButton 源代码(如 [1] 中的建议)构建我自己的按钮。

但是,只是导入组件导致 handleSubmitWithRedirect prop 抗议 handleSubmit(我也走自定义表单的路,所以这里的 handleSubmit 来自 react-final-form 的渲染 属性表单组件。) 与 handleSubmitWithRedirect 的类型不匹配。使用库中的 SaveButton 时这不是问题(尽管根据 WebStorm hswr 在 SaveButton 上没有类型)。

由于 handleSubmit 在与 SaveButton.handleSubmitWithRedirect 一起使用时有效,我假设可能没有实际的不兼容性,只是类型规范的问题。

我希望能就如何解决此问题提供帮助,and/or 有助于准确了解问题所在。我在打字方面还差得很远。

我试过打字稿 3.6.4 和 3.9.2。

这是打字稿编译器错误:

TS2322: Type '(event?: Partial, "preventDefault" | "stopPropagation">> | undefined) => Promise | undefined' is not assignable to type '(redirect?: string | boolean | RedirectToFunction | undefined) => void'. Types of parameters 'event' and 'redirect' are incompatible. Type 'string | boolean | RedirectToFunction | undefined' is not assignable to type 'Partial, "preventDefault" | "stopPropagation">> | undefined'. Type 'string' is not assignable to type 'Partial, "preventDefault" | "stopPropagation">> | undefined'.

handleSubmit 具有以下类型:

(event?: (Partial, "preventDefault" | "stopPropagation">> | undefined)) => (Promise | undefined)

handleSubmitWithRedirect(将 SaveButton 导入我的树时)具有以下类型:

((redirect?: (string | boolean | RedirectToFunction | undefined)) => void) | undefined

[1]

我暂时忽略了这个,但我今天做了react-admin更新,最新版本现在是3.9.5,并检查了SaveButton。结果 handleSubmitWithRedirect 的类型修改为

handleSubmitWithRedirect?:
    | HandleSubmitWithRedirect
    | FormRenderProps['handleSubmit'];

这使得 handleSubmit 的建议分配也可以从 TypeScript 的角度工作。