2016-11-13 37 views
3

在VS 2015 Update 3中,我有下面标记为A的打字稿代码,但它生成下面标有B的代码。问题是源有字段但输出没有。请帮忙。TypeScript编译器产生不正确的输出

A.

"use strict"; 
export class RoleViewModel { 
    public Id: number; 
    public Name: string; 
    public Description: string; 
    public IsEnabled: boolean; 
    public ResourceCustomizationId: number; 
} 

B.

"use strict"; 
export class RoleViewModel { 
} 
//# sourceMappingURL=role.js.map 

回答

2

Javascript不知道字段声明,TypeScript将删除所有未在您的类中分配或由任何方法引用的字段。

你的解决方法是默认值设置为这样的那些领域:

export class RoleViewModel { 
    public Id: number = 0; 
    public Name: string = ""; 
    public Description: string = ""; 
    public IsEnabled: boolean = false; 
    public ResourceCustomizationId: number = 0; 
} 

它会生成以下代码:

export class RoleViewModel { 
    constructor() { 
     this.Id = 0; 
     this.Name = ""; 
     this.Description = ""; 
     this.IsEnabled = false; 
     this.ResourceCustomizationId = 0; 
    } 
} 
1

当然,正确的行为。当TypeScript被编译成JavaScript时,它会删除所有的字段声明,因为JavaScript根本不使用它们。只有定义被保留。

通常,您不应该被这种行为困扰太多。只需在TypeScript中编写代码就像在Java或C#中一样,并且在大多数情况下您不会遇到任何问题。