我正在尝试为具有嵌套字段的表单的状态创建一个数据对象,但是我在嵌套字段的类型推断方面遇到了问题。 我尝试使用联合和条件类型,但我不完全理解如何正确使用。
TS Playground 链接: https://tsplay.dev/mxoJzN
ll->premier->suivant->suivant
答案 0 :(得分:1)
如果你想递归地应用TFields
作为对象属性,并使用IField
作为其他属性,你可以将TFields
定义为
type TFields<T> = {
[K in keyof T]: T[K] extends object ? TFields<T[K]> : IField<T[K]>
}
这将使 form
示例正确键入。如果您有一组特定的原始类型,例如number
、string
和 boolean
,您也可以将上面的 IField<T[K]>
替换为 T[K] extends number | string | boolean ? IField<T[K]> : never
,这样您就会收到不受支持的类型错误。>