繁体   English   中英

使用值的类型并在相同的结构中创建另一个对象,但使用字符串作为值和深度嵌套

[英]Use type of values and make another object in the same structure but with string as values and also deep nesting

假设我们有一个这样的 TypeScript 类型:

type FormValues = {
 name: string
 organization: {
   name: string
   telephone: string
   employees: number
 }
}

基于这种类型,我想要一个 TypeScript 实用程序,它会产生以下类型:

type ErrorValues = {
 name?: string
 organization?: {
   name?: string
   telephone?: string
   employees?: string
 }
}

所以我可以有这样的事情:

const errors: ErrorUtility<FormValues>

console.log({ employeesError: errors?.organization.employees })

您可以使用映射类型和条件类型执行此操作:

type ErrorUtility<T> = {
  [K in keyof T]?: T[K] extends number | string | boolean ? string : ErrorUtility<T[K]>;
}

这说的是:

对于输入类型T中的任何键K ,结果类型中有一个键K ,因此该值是可选的,并且:

  • 一个字符串,在原始值类型的情况下; 或者
  • 本身是一个错误对象,递归地。

这是一个显示它正在使用的操场: https : //tsplay.dev/wXk3LW

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM