我需要一个将对象从一种类型映射到另一种类型的函数:
我有一个这样的对象:
interface IEntityPerson {
person_id: number
name: string
age: number
address: IAddress
}
const orig: IEntityPerson = {
person_id: 1,
name: 'Ole',
age: 40,
address: myAddress
}
我想使用解构映射到另一种类型,其中 person_id 重命名为 personId:
interface IRenamed {
personId: number
name: string
age: number
address: IAddress
}
const newObj: IRenamed = {
personId: 1,
name: 'Ole',
age: 40,
address: myAddress
}
我试过了,但没用:
export function mapContractTemplate(p: IEntityPerson): IRenamed {
const renamed = {
person_id: personId,
...rest
} = p
return renamed
}
我该怎么做?
另外,请注意“地址”属性是一个嵌套对象。有没有一种聪明的方法可以通过解构和/或传播来做到这一点?
最佳答案
解构一个对象已经将解构的属性定义为该 block 范围内的字段,它们不能作为一个组分配给另一个字段。
你可以这样做:
export function mapContractTemplate(p: IEntityPerson): IRenamed {
const { person_id, address, ...rest } = p;
return {
personId: person_id,
address: { ...address },
...rest
}
}
这也会创建地址字段的副本,但不会创建它的深拷贝。因此,如果 address
包含更多嵌套对象或数组,您将不得不手动执行嵌套解构。
关于typescript - 使用解构/扩展在 TypeScript 中复制具有重命名属性的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49006027/