【问题标题】:Get function argument type on function declaration在函数声明中获取函数参数类型
【发布时间】:2020-02-24 15:39:35
【问题描述】:

我正在构建一个自定义 React 钩子,它接受一个对象(具有作为属性之一的函数)作为参数。

我想获得该函数参数的类型定义,我目前可以这样做:

  const { submitHandler, register } = useForm({
    handleSubmit: data => {
      /*
      Everything is ok:
      (parameter) data: {
          inputs: InputRefs;
          e: React.FormEvent<HTMLFormElement>;
      }
      */
    }
  });

但是,我想通过在 useForm 参数对象之外获取 handleSubmit 来拆分代码,如下所示:

  const handleSubmit = data => {
    // Parameter 'data' implicitly has an 'any' type, but a better type may be inferred from usage.
  };

  const { submitHandler, register } = useForm({ handleSubmit });

但是如果我这样做,data 的类型是“any”...有没有办法获取该函数参数的类型定义?还是唯一正确的解决方案真的只是导出/导入类型?

对不起,如果这不明确或已经解释过,但我刚开始学习打字稿,我似乎无法找到正确的关键字来找到我所问的答案......

谢谢

【问题讨论】:

  • 如果你有handleSumbit的数据接口(你可能有)你应该在函数const handleSubmit = (data: SubmitValuesInterface) =&gt; {}中指定它。这应该让您将此函数传递给 useForm 钩子
  • useForm 是来自react-hook-form.com 的那个吗?
  • 嗯,它不是 react-hook-form 但基本上是我复制它只是为了学习一些东西......
  • @VasylButov 是的,我只是想尽量避免在我使用自定义挂钩的每个文件中导入该接口......但是,如果没有其他选择......

标签: javascript reactjs typescript


【解决方案1】:

在此处右键单击handleSubmit

const { submitHandler, register } = useForm({
    handleSubmit: data => {
      /*
      Everything is ok:
      (parameter) data: {
          inputs: InputRefs;
          e: React.FormEvent<HTMLFormElement>;
      }
      */
    }
  });

并选择“转到定义”。这将为您提供您需要在此处指定的类型:

const handleSubmit: ${Type} = data => {
    // Parameter 'data' implicitly has an 'any' type, but a better type may be inferred from usage.
  };

  const { submitHandler, register } = useForm({ handleSubmit });

【讨论】:

  • 是的.. 所以这意味着我没有其他选择,除了导入接口和 useForm 钩子,对吗?不知道为什么,当第一个示例中的类型可用时需要导入该接口感觉很糟糕......
猜你喜欢
  • 2012-02-16
  • 1970-01-01
  • 2019-07-30
  • 2019-02-26
  • 2011-10-02
  • 2019-08-13
  • 2021-09-03
  • 2020-10-11
相关资源
最近更新 更多