有没有办法克隆具有指定键的对象。例如,你有这个对象
const User = {
firstName: '',
lastName: '',
age: '',
gender: '',
job: '',
}
您只想克隆或提取firstName
和lastName
以创建另一个对象,如:
const UserPublicInfo = {
firstName,
lastName,
}
我知道一些解决方案,但......
const UserPublicInfo = {
firstName: User.firstName,
lastName: User.lastName,
}
小列表没有问题,但是对于大型列表来说这将是单调乏味的,比如10个或更多的密钥。
我们可以使用Rest Operator
特别省略这些键const { firstName, lastName, ...UserPublicInfo } = User
这比第一个解决方案容易,但问题是如果你不知道User
对象的属性会怎样?是的,您可以console.log
内容,但如果您的开发后期团队成员更新了此User
对象并决定添加其他属性,那么您的应用程序通常会在此过程中产生错误。因此,安全性Solution #1
更好。
我希望它可以在下面的代码中轻松完成,但它会在我的转换器上抛出错误。
const UserPublicInfo = { firstName, lastName } = User
这个用例是否有更好的解决方案?
答案 0 :(得分:0)
您可以看到this typescript实施(但ES6功能)克隆,Object.Assign()
的想法和Function.prototype.apply
的深度克隆:
export class ClonerAssign<T> implements interfaces.ICloner{
clone<T>(sample: T): T {
var proto = Object.getPrototypeOf(sample);
//soft clone
var _new = Object.assign({}, sample, proto, Object.getPrototypeOf(proto));
//deep clone
var _props = props(proto).filter(x => notCoreFunc(x));
_props.forEach(key => {
if (typeof proto[key] === 'function') {
(_new as any)[key] = (...args: any[]) => {
(proto[key] as any).apply(_new, args);
};
}
});
return _new;
}
}