2016-11-13 3 views
3

У меня есть следующий код машинописного текста, обозначенный A ниже, в VS 2015 Update 3, но он создает код, обозначенный буквой B ниже. Проблема заключается в том, что у источника есть поля, но на выходе нет. Пожалуйста помоги.Компилятор TypeScript производит неправильный вывод

А.

"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#, и в большинстве случаев вы не столкнетесь с какими-либо проблемами.

Смежные вопросы