2017-05-27 67 views
0

让知道的名称和类的成员在打字稿语言属性下面的代码:如何知道一个扩展类的成员打字稿

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 
} 

上面的代码不能正常工作,因为它仅列出一些成员,但不是全部。有人可以提出解决方案以获得成员的完整列表吗? 谢谢。 M.P.

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