我有一个函数可以接受一个对象,该对象的属性由其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在评论中显示的方法,我尝试了区分联合,但未成功。似乎很难用有区别的工会来解决,但是我可能只是错过了一些东西而使事情变得过于复杂。您能提供的任何帮助将不胜感激。