TypeScript类型转换:如何用解构剩余操作移除嵌套对象属性?
类型转换:移除嵌套属性的解构实现
初始与目标类型定义
// 初始类型 interface Source { id: string; version: number; // 需要丢弃 masterVariant: MasterVariant; } interface MasterVariant { id: number; // 需要丢弃 sku?: string; } // 期望的"轻量化"目标类型 interface Target { id: string; masterVariant: MasterVariantLight; } interface MasterVariantLight { sku?: string; }
基础场景:移除顶层属性
要移除顶层的version属性,可通过顶层解构剩余操作实现:
export class Convert { public static toTarget(source: Source): Target { const { version, ...result } = source; return result; } }
嵌套属性移除方案
要同时移除顶层version和嵌套的masterVariant.id,可以通过嵌套解构完成:
export class Convert { public static toTarget(source: Source): Target { // 嵌套解构:丢弃version和masterVariant.id,保留其余属性 const { version, masterVariant: { id, ...masterVariantLight }, ...rest } = source; // 重组为Target类型对象返回 return { ...rest, masterVariant: masterVariantLight }; } }
逻辑说明
- 对顶层对象
source解构,丢弃version属性的同时,深入masterVariant内部做二次解构; - 在
masterVariant的解构中,丢弃id属性,剩余部分自动匹配MasterVariantLight类型; - 最后将顶层剩余属性与处理后的
masterVariantLight重组,得到符合Target类型的结果。
内容的提问来源于stack exchange,提问作者thedev
相关产品推荐
相关产品推荐

