2016-11-13 86 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#中一樣,並且在大多數情況下您不會遇到任何問題。