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

TypeScript中如何让一个类型属性的取值依赖另一个属性?

实现方案

要实现requiredFields的取值依赖于fields的实际元素,你需要给MyObject增加泛型参数来动态捕获fields的元素类型,再用该类型约束requiredFields:

type Form = {
  firstName: string
  lastName: string
  age: number
}

// 泛型T用于接收fields数组的元素联合类型,默认值为keyof Form兼容通用场景
type MyObject<T extends keyof Form = keyof Form> = {
  fields: T[]
  requiredFields: T[]
}

使用示例

// 合法示例:requiredFields元素都在fields范围内
const validForm: MyObject<'firstName' | 'age'> = {
  fields: ['firstName', 'age'],
  requiredFields: ['firstName']
}

// 非法示例:TS会直接抛出类型错误
const invalidForm: MyObject<'firstName' | 'age'> = {
  fields: ['firstName', 'age'],
  requiredFields: ['lastName'] // lastName不在fields的取值范围内
}

如果需要更自动的类型推导,不需要手动传入泛型,可以配合as const和satisfies实现自动校验:

const autoCheckForm = {
  fields: ['firstName', 'age'] as const,
  requiredFields: ['firstName']
} satisfies MyObject<typeof autoCheckForm.fields[number]>

这样TS会自动根据fields的字面量值校验requiredFields,无需手动声明泛型参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 16:09:05