以下代码让我们了解打字稿语言中类成员的名称和属性:
export class Teacher
{
Id: number;
Name: string;
}
var teacher = new Teacher();
for(p in teacher)
{
var typeField = null;
switch (typeof (teacher[p]))
{
case 'string':
typeField = "String";
break;
case 'number':
typeField = "Number";
break;
case 'object':
typeField = "Date";
break;
case 'boolean':
typeField = "Boolean";
break;
}
.....
.....
}
但是如果我以这种方式扩展课程:
export class Person
{
Id: number;
FirstName: string;
LastName: string;
}
export class Teacher extends Person
{
Id: number;
IdPerson: number;
School: string
}
之前的代码无法正常运行,因为它只列出了一些成员但不是全部成员。有人可以向我提出解决方案,以获得完整的成员名单吗? 谢谢。 熔点
答案 0 :(得分:0)
您的第一个示例也不起作用。或者您正在初始化您未在此处显示的属性。问题不在于继承。问题在于未初始化的属性。
如果您没有初始化属性(在构造函数中或在属性声明中指定默认值),TypeScript编译器将不会为未初始化的属性创建任何属性。
因此,在您的第一个示例中,生成的JavaScript是:
class Teacher {
}
...没有您定义的任何属性。当您在实例for..in
上使用teacher
时,它没有要枚举的属性。
为了将属性添加到类中,您必须在构造函数中或在属性声明期间初始化它们:
export class Teacher
{
Id: number = 0;
Name: string = "";
// Or initialize in constructor
constructor() {
this.Id = 0;
this.Name = ""
}
}
...它会将属性添加到生成的JavaScript中,以便将它们枚举为for..in
的一部分。