映射类型的Typescript对象

时间:2020-06-29 21:50:12

标签: typescript

我有一个函数可以接受一个对象,该对象的属性由其type键映射。例如:

const fieldProps = useFormField({ type: 'date', minDate: new Date() }) // ?
const fieldProps = useFormField({ type: 'email', minDate: new Date() }) // ❌ no minDate on email types

此函数(useFormField)需要使用传入的type属性来确定正确的输入,正确的返回值以及其中的状态管理器的某些属性。配置,状态和返回值只有一些重叠。该功能不是问题,并且到目前为止工作正常。

问题是另一个函数(useForm)本质上是useFormField的缩放版本。它需要一个字段配置对象(以及其他可能的选项),并且需要根据每个传递字段的type属性来推断正确的配置值,返回值和状态形状。

const { fields } = useForm({
  fields: {
    date: { type: 'date', minDate: new Date().toISOString() },
    name: { type: 'text' },
    multiselect: { type: 'multiselect' },
  },
  onSubmit: () => {}
})

Here is a ts playground以及用于重现此代码的所有基本代码。我不确定此设置的最佳/最简单方法。

我不确定如何从字段对象的每个项目中获取type作为我可以像通用类一样传递的值,因为它需要不同的输入+返回值。

基于@jcalz在评论中显示的方法,我尝试了区分联合,但未成功。似乎很难用有区别的工会来解决,但是我可能只是错过了一些东西而使事情变得过于复杂。您能提供的任何帮助将不胜感激。

0 个答案:

没有答案