【发布时间】:2020-07-24 00:59:13
【问题描述】:
我有一个对象,我在多个服务中使用它,每个都应该接受一些参数,所以我创建了两个构造函数,但 TypeScript 不允许我这样做,我的例子是:
class User {
id: number;
username: string;
password: string;
email: string;
firstName: string;
lastName: string;
roles: string[];
constructor(username: string, password: string){
this.username = username;
this.password = password;
}
constructor(id: number, username: string, firstname: string, lastname: string, roles: string[]){
this.id = id;
this.username= username;
this.firstname= firstname;
this.lastname= lastname;
this.roles = roles;
}
//.. and maybe another constructor also
}
请问有什么技巧可以解决这个问题吗?
例如,当我在构造函数中使用 Optional ? 时:
constructor(
public id?: number,
public username?: string,
public email?: string,
public password?: string,
public firstName?: string,
public lastName?: string,
public roles?: string[]) {
}
当我从后端获取数据时:
this.service.usersList().subscribe(users => {
console.log(users);
this.dataSource.data = users;
});
roles 设置在密码中而不是角色中失败:
{
"id": 1,
"username": "user1",
"email": "user1@email.com",
"password": [
"USER",
"MODR"
]
}
对此我不确定。
也许我不准确,但我使用这种方法来解析我的数据:
static fromJson(item: Object): any {
return new User(
item['id'],
item['username'],
item['email'],
item['roles']
);
}
为此,当我创建一个可选的构造函数时,它将按照我的调用顺序设置属性。
【问题讨论】:
-
Typescript 只允许 1 个构造函数。您可以使用
?可选参数。哪些字段始终是必填字段? -
@NicholasK 我知道打字稿只允许一个构造函数,但在我的情况下我需要多个构造函数,如果我使用
?作为可选,它在某些情况下会失败 -
您可以使用
optional parameters,并验证是否存在实现两个构造函数之一所需的参数,请参阅下面的答案 -
解释那些案例,以便我们给你一个更好的答案。
-
你不能在 JS 中对同一个方法有多个实现。但是,您可以在 TypeScript even for constructors 中为它们声明重载签名。
标签: angular typescript