formik连接道具可扩展缺少的属性

时间:2019-09-26 09:35:10

标签: reactjs typescript types extends formik

寻找一种避免使用Props时在formik的{​​{1}}的所有25 ++属性中写下来的方法。

错误正是这样的:connect()

我想使用整个Type '{ entry: Entry; }' is missing the following properties from type 'Props': values, errors, touched, isValidating, and 25 more.对象,也可以使用其中的formik,所以像这样:

values

或类似的话:

const MyComponent = ({ entry, values }: Props) => { //...

像这样导出它时:const MyComponent = ({ entry, formik }: Props) => { //...(还没有输入,可能需要一些帮助)

我正在努力处理以下类型:

export default connect(MyComponent);

甚至

import * as React from 'react';
import {
  connect,
  FormikProps,
  FormikValues
  ...
} from 'formik';
...

interface Props extends Pick<FormikProps<FormikValues>, 'values'> {
  entry: Entry;
  values: Pick<FormikProps<FormikValues>, 'values'>;
  // values: FormikValues; //tryouts
}

interface Props extends FormikProps<FormikValues> {
  entry: Entry;
  // values: FormikValues;
}

我不想将const MyComponent = ({ entry, values }: Props & FormikProps<FormikValues>) => { 道具设为可选(所以formik部分)。但是,如果我不使用?,则会收到错误消息? 。但是我不明白,因为所有这些道具都是通过Property 'values' (or formik) is missing in type '{ entry: Entry; }' but required in type 'Props'.传递的,而不是通过父组件传递的。

我认为connect()关键字可让您避免完全输入extends SomeProps中的属性。因此,我不必在我的SomeProps界面中加入formikvalues或任何这些道具。

我怎么了?在这种情况下,类型声明应该如何?

1 个答案:

答案 0 :(得分:1)

请注意,connect不再是Formik的一部分,请改用useFormik

您可以用这种方式定义它。

  interface Props = {
     entry: Entry;
  }

  const MyComponent = ({ entry, values}): Props & FormikProps<FormikValues> => {

  const ConnectedComponent = connect<Props, any>(MyComponent)

现在,您可以轻松使用<ConnectedComponent />而不会出现任何类型错误