【问题标题】:Redux form props & typescriptRedux 表单道具和打字稿
【发布时间】:2018-06-30 22:58:46
【问题描述】:

多年来一直在寻找,但没有找到任何值得的东西。

当我使用 Flow 时,我可以简单地:

import { type FieldProps, FormProps } from 'redux-form';

有没有类似(而且很简单)的方法可以在 typescript 中正确地将 props 设置为 redux 形式?

文档没有说任何关于 typescript 的内容,只有一个用于 Flow typings 的页面。

但是,我发现我可以从 redux-form 导入类似 propTypes 的东西:

import { reduxForm, propTypes } from 'redux-form'

但是 - redux-form 没有像 propTypes 那样导出,所以文档有点被弃用了。

链接:https://redux-form.com/7.2.1/docs/api/props.md/

提前感谢您的任何帮助。

tl;dr class RegistrationForm extends React.PureComponent<any> {
                                      what to drop here ^^^^^                                            

【问题讨论】:

  • 你试过import {FieldProps, FormProps} from 'redux-form';吗?在 TypeScript 中,您并不表示要使用特殊关键字导入 type,您只需导入类型。
  • @AluanHaddad 是的,我试过了。 redux-form 没有像 FieldPropsFormProps 那样导出:(
  • 你需要用你的包管理器安装@types/redux-form包。
  • @AluanHaddad 包括&lt;FormProps&lt;any, any&gt;&gt;,但它仍然无法正常工作。它说,例如handleSubmit 函数在 props 中找不到,即使它存在。
  • reduxForm.d.ts 中查看InjectedFormProps&lt;FormData = {}, P = {}&gt;。请注意,类型参数的默认值使得指定它们是可选的。

标签: javascript reactjs typescript redux-form definitelytyped


【解决方案1】:

您需要使用您的包管理器安装@types/redux-form 包。 @types/redux-form 包包含 redux-form 包的类型定义。

然后您可以从redux-form 导入类型定义,例如InjectedFormProps

将用reduxForm() 包装的表单应该具有扩展InjectedFormProps&lt;FormData = {}, P = {}&gt; 的道具。

reduxForm() 类型是通用的reduxForm&lt;FormData = {}, P = {}&gt;(...

看例子:

import * as React from 'react';
import { reduxForm, InjectedFormProps, Field } from 'redux-form';

import { IUser } from './index';

interface IProps {
  message: string;
}

class UserForm extends React.Component<InjectedFormProps<IUser, IProps> & IProps> {
  render() {
    const { pristine, submitting, reset, handleSubmit, message } = this.props;
    return (
      <form onSubmit={handleSubmit}>
        <div>{message}</div>
        <div>
          <label>First Name </label>
          <Field
            name="firstName"
            component="input"
            type="text"
            placeholder="First Name"
          />
        </div>
        <div>
          <label>Last Name </label>
          <Field
            name="lastName"
            component="input"
            type="text"
            placeholder="Last Name"
          />
        </div>
        <div>
          <button type="submit" disabled={pristine || submitting}>
            Submit
          </button>
          <button type="button" disabled={pristine || submitting} onClick={reset}>
            Clear Values
          </button>
        </div>
      </form>
    );
  }
}

export default reduxForm<IUser, IProps>({
  form: 'userForm',
})(UserForm);

@types/redux-form 包的源代码位于here。您可以在用于类型检查的redux-form-tests.tsx 文件中查看那里的类型和更复杂的示例。

【讨论】:

  • 我认为应该是React.Component&lt;InjectedFormProps&lt;IUser, IProps&gt; &amp; IProps&gt;,至少从今天开始。
  • 我的 IDE 在导入时给出了InjectedFormProps not found in 'redux-form'eslint(import/named) ,但它仍然可以编译和运行,知道吗?
  • @zerkms,谢谢,修复React.Component&lt;InjectedFormProps&lt;IUser, IProps&gt; &amp; IProps&gt;
猜你喜欢
  • 2019-04-23
  • 2020-12-26
  • 2021-11-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-30
  • 2021-07-11
  • 2019-12-11
  • 1970-01-01
相关资源
最近更新 更多