具有对象和数组的树的Typescript递归映射类型

时间:2019-05-06 22:54:58

标签: typescript

我有一棵具有以下Typescript类型的状态树:

type StateTree = {
  foo: {
    id: number,
    name: string,
    createdAt: Date
  },
  bar: {
    items: Array<{id: number, name: string}>
  },
  baz: {
    count: number,
    isVisible: boolean,
    children: Array<Array<number, number>>
  }
}

我需要在这棵树上运行验证功能。该树的返回类型应反映StateTree的形状,但每个最终值应为错误消息(字符串),如下所示:

type Errors = {
  foo: {
    id: string,
    name: string,
    createdAt: string
  },
  bar: {
    items: Array<{id: string, name: string}>
  },
  baz: {
    count: string,
    isVisible: string,
    children: Array<Array<string, string>>
  }
}

我目前有一个映射类型可以尝试执行此操作,因为真实状态树要大得多。下面是我的映射类型:

type ValidationErrors<T> = T extends object ? {
  [Key in keyof T]: ValidationErrors<T[Key]>
} : string

但是,这对数组不起作用。如何更新映射类型以支持数组?

0 个答案:

没有答案