首页 > 解决方案 > 带有对象和数组的树的 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

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

标签: typescript

解决方案


推荐阅读