如何将Review对象映射到Original对象?避免填充剩余必填属性
如何在不填充全部属性的情况下将Review数组映射为Original数组
针对你遇到的编译问题,因为无法修改Original接口的必填属性要求,这里提供几种可行的解决方案:
方法1:直接使用类型断言
通过类型断言告诉编译器,你确认映射后的对象符合Original类型要求,无需强制填充所有属性:
export class NewClass{ originals!: Original[]; reviews!: Review[]; constructor() { this.originals = this.reviews.map(review => ({ a: review.a_1, b: review.b_1 } as Original)); } }
方法2:借助Partial类型过渡
先使用Partial<Original>定义允许部分属性的中间对象,再转换为Original类型,逻辑更清晰:
export class NewClass{ originals!: Original[]; reviews!: Review[]; constructor() { this.originals = this.reviews.map(review => { const partial: Partial<Original> = { a: review.a_1, b: review.b_1 }; return partial as Original; }); } }
方法3:使用Object.assign构建对象
通过Object.assign创建基础对象并赋值已知属性,再进行类型断言:
export class NewClass{ originals!: Original[]; reviews!: Review[]; constructor() { this.originals = this.reviews.map(review => Object.assign({}, { a: review.a_1, b: review.b_1 }) as Original ); } }
注意事项
以上方法都是在编译阶段绕过TypeScript的必填属性检查,运行时生成的Original对象会缺少c、d、e属性。如果后续业务逻辑依赖这些缺失的属性,可能会引发运行时错误,需要确保你的业务场景能够接受这种情况。
内容的提问来源于stack exchange,提问作者Vivek Shukla
相关产品推荐
相关产品推荐

