javascript - Typescript 错误和展开运算符是由 ...props 引起的?

标签 javascript node.js reactjs typescript formik

您好,当我尝试将扩展运算符与 Typescript 结合使用时,我遇到了问题。

我有一个函数,其中 useFormikContext()useField() 函数来自 Formik 的库。当我添加 //@ts-ignore 时,一切都按预期正常工作,但是,如果没有该行,我会收到错误:

const DatePickerField = ({ ...props }) => {
  const { setFieldValue } = useFormikContext();
  //@ts-ignore
  const [field] = useField(props);
  return (
    <DatePicker
      {...field}
      {...props}
      selected={(field.value && new Date(field.value)) || null}
      onChange={(val) => {
        setFieldValue(field.name, val);
      }}
    />
  );
};
Argument of type '{ [x: string]: any; }' is not assignable to parameter of type 'string | (ClassAttributes<HTMLInputElement> & InputHTMLAttributes<HTMLInputElement> & FieldConfig<any>) | (ClassAttributes<...> & ... 1 more ... & FieldConfig<...>) | (ClassAttributes<...> & ... 1 more ... & FieldConfig<...>)'.
  Type '{ [x: string]: any; }' is not assignable to type 'ClassAttributes<HTMLInputElement> & InputHTMLAttributes<HTMLInputElement> & FieldConfig<any>'.
    Property 'name' is missing in type '{ [x: string]: any; }' but required in type 'FieldConfig<any>'.  TS2345

据我了解,这个函数接受扩展运算符,这意味着它接受具有 0 个或多个属性的对象/数组。它自动被分配类型 { [x: string]: any; } 这意味着有一个值类型为any 的键(x)。但是,我不知道如何修复 typescript 给出的这个错误。

最佳答案

好吧,经过一番研究后,我发现可以修复这些错误。

语法 '{ [x: string]: any; }' 让我知道这个对象有一个键 x,它是一个值为 any 的字符串。我在提问时不知道这一点,我有点困惑。 https://www.typescriptlang.org/docs/handbook/advanced-types.html <-- 索引类型和索引签名

Typescript 还让我知道 useField() 函数需要值字符串的属性名称。所以我使用这个新发现的知识输入了它,并摆脱了未使用的函数selected,新代码现在如下所示:

const DatePickerField = ({ ...props }: { [x: string]: any; name: string }) => {
  const { setFieldValue } = useFormikContext();

  const [field] = useField(props);
  return (
    <DatePicker
      {...field}
      {...props}
      // selected={(field.value && new Date(field.value)) || null}
      onChange={(val) => {
        setFieldValue(field.name, val);
      }}
    />
  );

关于javascript - Typescript 错误和展开运算符是由 ...props 引起的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61312273/

相关文章:

javascript - ReactJS IconButton 在 Firefox 中不起作用

javascript - 测试 angularJS ui-router 解析函数

javascript - 如何在运行在 node.js 上的脚本中使用 jsdoc?

mysql - 在服务器重启 Node/Express 之前调用函数

javascript div 关闭问题

javascript - JavaScript 中长时间运行的任务

javascript - AJAX 调用到/从 Node/Express 的 MongoDB 示例?

javascript - 在 React 中更改时淡出/淡入文本

reactjs - antd 5 模块未找到 : Error: Can't resolve 'antd/dist/antd.less'

javascript - 我需要 React Router V5 中的嵌套路由