如何在打字稿中了解扩展类的成员

时间:2017-05-27 14:39:05

标签: typescript reflection

以下代码让我们了解打字稿语言中类成员的名称和属性:

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
}

之前的代码无法正常运行,因为它只列出了一些成员但不是全部成员。有人可以向我提出解决方案,以获得完整的成员名单吗? 谢谢。 熔点

1 个答案:

答案 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的一部分。