所以我想制作一个可以用两种方式初始化的类。
首先,通过使用常规参数,像这样
class User {
name: string
age: number
constructor(name: string, age: number) {
this.name = name
this.age = age
}
}
或者可以使用这样的对象进行初始化
type CustomParameter = {
name: string,
age: number
}
class User {
name: string
age: number
constructor(parameters: CustomParameter) {
this.name = parameters.name
this.age = parameters.age
}
}
我不想创建两个不同的类,我想创建具有多个构造函数的类。所以我尝试使用函数重载,所以我认为我可以做这样的事情,但是有错误
type CustomParameter = {
name: string,
age: number
}
class User {
name: string
age: number
constructor(parameters?: CustomParameter, name: string, age: number)
constructor(parameters: CustomParameter, name?: string, age?: number) {
if (!parameters) {
this.name = name
this.age = age
} else {
this.name = parameters.name
this.age = parameters.age
}
}
}
上面的代码实际上是简化版本,该类实际上具有很多属性。所以如果我做类似的事情会很乏味
const somebody = new Human(parameters.name, parameters.age) // <---- it is easy if only 2 params
// but it will be tedious if I have to initialize a class with more than 10 properties
// over and over again
// so I think it will be easier if I just put the object in the class constructor
错误是这样的
您可以使用如下重载:
type CustomParameter = {
name: string;
age: number;
};
class User {
name: string;
age: number;
constructor(name: string, age: number);
constructor(parameters: CustomParameter);
constructor(first: CustomParameter | string, age?: number) {
if (typeof first === "string") {
this.name = first;
this.age = age!;
} else {
this.name = first.name;
this.age = first.age;
}
}
}
new User("wewe", 12);
new User({ name: "wewe", age: 12 });
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句