2013-07-23 9 views
2

У меня проблема с JS-кодом, сгенерированным компилятором TypeScript. Для класса, как это:TypScript не генерирует незарегистрированные сообщения

// Class 
export class UserDTO { 
    Id: number; 
    FirstName: string; 
    LastName: string; 
    DateOfBirth: Date; 

    getFUllName(): string { 
     return this.FirstName + ' ' + this.LastName; 
    }   
} 

машинопись генерирует следующий код:

define(["require", "exports"], function(require, exports) { 
    // Class 
    var UserDTO = (function() { 
     function UserDTO() { 
     } 
     UserDTO.prototype.getFUllName = function() { 
      return this.FirstName + ' ' + this.LastName; 
     }; 
     return UserDTO; 
    })(); 
    exports.UserDTO = UserDTO; 
}); 
//@ sourceMappingURL=TestClass.js.map 

Приведенный выше код не содержит неиспользуемые (неиспользуемые) поля, но мне нужно их в каком-то «объект-объект к- «случай отображения». Можно ли заставить компилятор генерировать их всегда?

Я использую машинопись 0.9.1 из Visual Studio 2012. Вот мои параметры компилятора:

<TypeScriptTarget>ES5</TypeScriptTarget> 
<TypeScriptIncludeComments>true</TypeScriptIncludeComments> 
<TypeScriptSourceMap>true</TypeScriptSourceMap> 
<TypeScriptModuleKind>AMD</TypeScriptModuleKind> 

Заранее спасибо за любые подсказки.

ответ

3

Вы можете инициализировать их при определении их:

export class UserDTO { 
    Id: number = 0; 
    FirstName: string = ''; 
    LastName: string = ''; 
    DateOfBirth: Date = undefined; 

    getFUllName(): string { 
     return this.FirstName + ' ' + this.LastName; 
    }   
} 

Сформирован JavaScript:

var UserDTO = (function() { 
    function UserDTO() { 
     this.Id = 0; 
     this.FirstName = ''; 
     this.LastName = ''; 
     this.DateOfBirth = undefined; 
    } 
    UserDTO.prototype.getFUllName = function() { 
     return this.FirstName + ' ' + this.LastName; 
    }; 
    return UserDTO; 
})(); 

A demo to show looping through such properties.

+0

Да, это операционный - Я просто предположил, что можно авто-инициализировать их в JavaScript (какой-то компилятор?). Я проверил спецификацию генерации кода: http://www.typescriptlang.org/Content/TypeScript%20Language%20Specification.pdf и кажется, что генерируются только члены с присвоениями. Я буду отмечать ваше сообщение как ответ, если нет лучшего варианта. – krlm

+0

Я предполагаю, что (в Javascript), если вы установите член на 'null' (например,' this.FirstName = null'), который элемент исчезнет из мешка участника объекта? Что сделало бы это эквивалентом, не ссылаясь на них в первую очередь? –

4

Вам не нужно объявлять поля в JavaScript. Объявления типа TypeScript используются только для проверки типов. Вы также можете получить доступ к своим полям с помощью скомпилированного кода.

var o = new UserDTO(); 
o.FirstName = 'John'; 
o.LastName = 'Doe'; 
console.log(o.getFUllName()); // "John Doe" 

скрипку: http://jsfiddle.net/nPr6f/

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