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

如何为属性相互依赖的对象数组声明TypeScript类型?

解决方案

我们可以通过泛型辅助函数结合类型自动推断实现需求,无需提前枚举所有可能的类型,可适配任意类型的one属性:

  1. 首先定义基础的Value类型:
type Value<T> = { one: T, all: T[] }
  1. 定义校验数组的工具类型和创建root对象的辅助函数:
// 校验数组每一项都符合 Value 类型约束
type ValidateValues<T extends unknown[]> = {
  [K in keyof T]: T[K] extends Value<infer U> ? Value<U> : never
}
// 辅助函数:自动推断并约束 values 数组内的元素类型
function createRoot<T extends unknown[]>(root: { values: ValidateValues<T> }) {
  return root
}
  1. 直接使用辅助函数定义root对象即可触发类型校验:
const root = createRoot({
  values: [
    { one: 1, all: 5 }, // 类型错误:all 应为 number[] 类型
    { one: true, all: [5] }, // 类型错误:all 应为 boolean[] 类型
    { one: 'a', all: ['a', 'b', 'c'] }, // 校验通过
    { one: true, all: [false, true, true] } // 校验通过
  ]
})

实现原理

辅助函数会自动推导values数组中每个元素的one属性类型,再强制约束同元素的all属性必须为该类型的数组,完全满足任意类型适配的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 03:39:03