You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在TypeScript中为多维对象强制最大深度与值约束的类型定义

多维对象的TypeScript类型约束问题

简介

我在TypeScript文件中有一个多维对象,示例如下:

const store = {
  key_1: "value",
  key_2: 123,
  key_3: true,
  key_4: {
    key_4_1: "value",
    key_4_2: 123,
    key_4_3: false,
    key_4_4: [
      "value_4_4_1",
      "value_4_4_2",
      "value_4_4_3",
    ]
  },
  key_5: [
    "value_5_1",
    "value_5_2",
    "value_5_3",
  ],
  value_5: {
    key_1: "copy-pasted-from-parent-object",
    key_2: 123,
    key_3: true,
    key_4: {
      key_4_1: "value",
      key_4_2: 123,
      key_4_3: false,
      key_4_4: [
        "value_4_4_1",
        "value_4_4_2",
        "value_4_4_3",
      ]
    },
    key_5: [
      "value_5_1",
      "value_5_2",
      "value_5_3",
    ]
  }
};

请注意,每个对象及其子对象、数组、值的顺序、键数量、长度、值和大小都可能不同,不影响最终结果。

背景

我想要创建一个interface或type来强制以下规则:

  • 数组和对象中的值(非数组或嵌套对象的情况)必须是number、boolean或string类型。
  • 不能存在undefined、null或NaN值。
  • 数值不能为负数(即小于0)。
  • 字符串值不能为空。
  • 对象的嵌套深度不能超过4层(4个嵌套对象)。
  • 数组中不会包含嵌套对象或数组。
  • 数组项的值始终为string类型。
  • 所有对象的键必须为string类型。

方案1及结果

我尝试使用以下接口作为该对象的类型:

interface Store {
  [key: string]: string | number | boolean | string[] | Store;
}

但该接口无法强制规则3、4和5。

针对规则3和4的方案2及结果

为简化规则3和4的类型检查,我实现了一个循环函数来检查字符串值(核心逻辑为string.length > 0 && number >= 0),并使用throw new TypeError(...)来提示错误。

问题

如何修改该interface或使用更合适的type来更高效地强制这些规则?


内容的提问来源于stack exchange,提问作者Malekai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 19:40:34