我有课:
class Person {
name: string;
age: number;
gender: string;
constructor(params: any){
this.name = params.name;
this.age = params.age;
this.gender = params.gender;
}
}
如何从类Person
中获取类型,该类型等效于:
type PersonType = {
name: string;
age: number;
gender: string;
}
因此我可以将其用于构造函数的params类型。我不想重复代码来编写类似上面代码的类型定义。我正在寻找一种从类定义中获取类型的方法。
我不想重复以下代码:
name: string;
age: number;
gender: string;
答案 0 :(得分:1)
只需将类指定为类型
class Person {
name: string;
age: number;
gender: string;
constructor(params: Person) {
this.name = params.name;
this.age = params.age;
this.gender = params.gender;
this.gender = params.gender2; // error
}
}
const test1 = new Person({ age: 1, gender: '1', name: '1' });
const test2 = new Person({ age: 1, gender: '1' }); // error
或者您可以使用Object.assign一次初始化所有字段,但是随后需要为所有字段指定默认值
class Person {
name: string = "default";
age: number = 0;
gender: string = "default";
constructor(params: Person) {
Object.assign(this, params);
}
}
const test3 = new Person({ age: 1, gender: '1', name: '1' });
const test4 = new Person({ age: 1, gender: '1' }); // error
答案 1 :(得分:1)
我不确定,我说对了。
但是也许您想要这个吗?
export class Person {
name: string;
age: number;
gender: string;
constructor(params: Person){
this.name = params.name;
this.age = params.age;
this.gender = params.gender;
}
someMethod?: () => void = () => {};
}
用法示例
const person: Person = new Person(...);
答案 2 :(得分:0)
您可以将类用作类型,例如
def get_export_filename(self, request, queryset, file_format):
filename = "%s.%s" % ("Réalisations de vente",
file_format.get_extension())
return filename
但是,看到您的评论之后,我想知道为什么您不输入构造函数的参数?
class A { name: string; };
let foo: A = { name: "John" };
这是哪里的问题?