如何仅通过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
相关产品推荐
相关产品推荐

