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

如何仅通过TypeScript接口实现对象属性的动态适配赋值?

解决方案:通过泛型接口实现类型安全的赋值

要实现你想要的效果,完全可以通过调整接口定义做到,核心是把ObjectX改成泛型接口,让data字段的类型能根据实际存储的内容动态确定,而不是固定成宽泛的Record<string, unknown>。

修改接口定义

把ObjectX改为泛型接口,默认保留原有宽泛类型以兼容其他场景:

export interface ObjectX<T = Record<string, unknown>> {
  key: string;
  title: string;
  data: T;
}

export interface ObjectY {
  name: string;
  security: number;
  integrity: number;
}

定义匹配ObjectY的objectX

当你需要objectX.data匹配ObjectY结构时,定义objectX时指定泛型参数为ObjectY:

const objectX: ObjectX<ObjectY> = {
  key: 'generic_data',
  title: 'Generic Data',
  data: {
    name: 'Generic Data',
    security: 50,
    integrity: 10,
  },
}

let objectY: ObjectY = {
  name: 'Specific Data',
  security: 10,
  integrity: 25,
}

直接类型安全赋值

此时objectX.data的类型被TypeScript明确识别为ObjectY,就能直接执行赋值操作,不需要任何类型断言:

objectY = objectX.data; // 完全合法,无类型错误

兼容非匹配场景

如果objectX.data是其他不匹配ObjectY的结构,比如:

const objectXOther: ObjectX = {
  key: 'other_data',
  title: 'Other Data',
  data: {
    id: 123,
    value: 'test'
  },
}

这时尝试把objectXOther.data赋值给objectY会直接触发TypeScript错误,符合你“仅当属性一致时才能直接赋值”的要求。

内容的提问来源于stack exchange,提问作者Fran Dugo Pradas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 16:43:56