推断嵌套对象中字段的泛型类型

时间:2021-04-03 00:13:58

标签: typescript

我正在尝试为具有嵌套字段的表单的状态创建一个数据对象,但是我在嵌套字段的类型推断方面遇到了问题。 我尝试使用联合和条件类型,但我不完全理解如何正确使用。

TS Playground 链接: https://tsplay.dev/mxoJzN

ll->premier->suivant->suivant

1 个答案:

答案 0 :(得分:1)

如果你想递归地应用TFields作为对象属性,并使用IField作为其他属性,你可以将TFields定义为

type TFields<T> = {
  [K in keyof T]: T[K] extends object ? TFields<T[K]> : IField<T[K]>
}

这将使 form 示例正确键入。如果您有一组特定的原始类型,例如numberstringboolean,您也可以将上面的 IField<T[K]> 替换为 T[K] extends number | string | boolean ? IField<T[K]> : never,这样您就会收到不受支持的类型错误。

TypeScript playground