Typescript-类似Kotlin的复制函数
在Kotlin中,可以使用其自动生成的Typescript-类似Kotlin的复制函数,typescript,Typescript,在Kotlin中,可以使用其自动生成的copy功能复制数据类 val jack = User(name = "Jack", age = 1) val olderJack = jack.copy(age = 2) 根据文档(),复制函数签名: 这样的事情可以在TypeScript中完成吗? 这是一个可以接受的解决方案,还是可以改进 export class User { constructor( public name: string, p
copy
功能复制数据类
val jack = User(name = "Jack", age = 1)
val olderJack = jack.copy(age = 2)
根据文档(),复制函数签名:
这样的事情可以在TypeScript中完成吗?
这是一个可以接受的解决方案,还是可以改进
export class User {
constructor(
public name: string,
public age: number) {}
copy(parameters: {
name?: string,
age?: number
}): User {
const { name, age } = parameters
return new User(name || this.name, age || this.age)
}
}
即使使用部分
,也可以解决此问题:
copy(partialUser:Partial):用户{
返回新用户(
partialUser.name | | this.name,
partialUser.age | | this.age)
}
您可以按如下所示解构项目:
class User {
constructor(
public name: string,
public age: number) {}
}
const jack = new User("Jack", 1);
const newJack = { ...jack, age: 2 };
这会产生副本,但年龄除外,现在是2
排序很重要(即年龄必须遵循对象解构)
扩展示例如下:
class User {
constructor(
public name: string,
public age: number) { }
copy(user: Pick<User, 'name' | 'age'>) {
return new User(user.name, user.age);
}
}
const jack = new User("Jack", 1);
const newJack = jack.copy({ ...jack, age: 2 });
console.log(newJack);
类用户{
建造师(
公共名称:string,
公众年龄:人数{}
复制(用户:选择){
返回新用户(User.name、User.age);
}
}
const jack=新用户(“jack”,1);
const newJack=jack.copy({…jack,年龄:2});
控制台日志(newJack);
您可以按如下所示解构项目:
class User {
constructor(
public name: string,
public age: number) {}
}
const jack = new User("Jack", 1);
const newJack = { ...jack, age: 2 };
这会产生副本,但年龄除外,现在是2
排序很重要(即年龄必须遵循对象解构)
扩展示例如下:
class User {
constructor(
public name: string,
public age: number) { }
copy(user: Pick<User, 'name' | 'age'>) {
return new User(user.name, user.age);
}
}
const jack = new User("Jack", 1);
const newJack = jack.copy({ ...jack, age: 2 });
console.log(newJack);
类用户{
建造师(
公共名称:string,
公众年龄:人数{}
复制(用户:选择){
返回新用户(User.name、User.age);
}
}
const jack=新用户(“jack”,1);
const newJack=jack.copy({…jack,年龄:2});
控制台日志(newJack);
我不会丢失最终的实例/静态函数吗?我添加了一个更广泛的示例,其中newJack
是完整的用户
。谢谢!你觉得Pick
比Partial
更合适吗?Pick
你说“它必须有我声明的成员”,而Partial
说“我不知道它会有什么”。在我们的情况下,我们可以非常严格地要求提供姓名和年龄,而不关心副本。因此,在我们的Pick
示例中将以下内容捕获为错误:const newJack=jack.copy({age:2})代码>有趣!我甚至可以使用(user:Pick):user{…}
。你认为我的部分示例不合适吗?我这样问是为了让我能够理解我通常做的是对的还是错的。我会失去最终的实例/静态函数吗?我添加了一个更广泛的示例,其中newJack
是完整的用户。谢谢!你觉得Pick
比Partial
更合适吗?Pick
你说“它必须有我声明的成员”,而Partial
说“我不知道它会有什么”。在我们的情况下,我们可以非常严格地要求提供姓名和年龄,而不关心副本。因此,在我们的Pick
示例中将以下内容捕获为错误:const newJack=jack.copy({age:2})代码>有趣!我甚至可以使用(user:Pick):user{…}
。你认为我的部分示例不合适吗?我这样问是为了让我能够理解我做的总体上是对还是错