正在try 为无限嵌套对象的 struct 定义类型/接口,但其值必须为Number|Number[].

type TValue = number | number[];
type TDataLevel1 = {
  [key: string]: TValue;
};
type TDataLevel2 = {
  [key: string]: TValue | TDataLevel1;
};
type TData = {
  [key: string]: TValue | TDataLevel2;
};

这最多可以工作3层嵌套对象.但是,JSON路径.key2.key1有错误,因为它是第4级.

  let data: TData = {
    key1: 1234,
    key2: {
      key1: [2, 4],
      key2: {
        key1: [6, 8],
        key2: { key1: [10, 12, 14] },  // error here
      },
    },
  };

这可以通过添加更多样板TDataLevel3、4..、N来支持N个级别来解决.有没有更好的方法来定义这类数据?

推荐答案

我们可以简单地递归引用该类型:

type TDataB = {
  [key: string]: TValue | TDataB;
};

Playground Link

Typescript相关问答推荐

Typescript联合类型-字段类型覆盖

根据第一个参数的值设置第二个参数的类型

如何使用Generics保留构造函数的类型信息?

typescript抱怨值可以是未定义的,尽管类型没有定义

在TypeScript中使用泛型的灵活返回值类型

在Typescribe中,extends工作,但当指定派生给super时出错""

如果一个变量不是never类型,我如何创建编译器错误?

在使用Typescribe时,是否有一种方法可以推断映射类型的键?

不推荐使用Marker类-Google map API警告

路由链接不会导航到指定router-outlet 的延迟加载模块

获取函数中具有动态泛型的函数的参数

仅针对某些状态代码重试HTTP请求

通配符路径与每条路径一起显示

如何使用Geojson模块和@Types/Geojson类型解析TypeScrip中的GeoJSON?

重载函数的T helper参数

下载量怎么会超过下载量?

使用泛型识别对象值类型

作为函数参数的联合类型的键

为什么受歧视的unions 在一种情况下运作良好,但在另一种非常类似的情况下却不起作用?

如何使用angular15取消选中位于其他组件中的复选框