В настоящее время я работаю над проектом typescript, и мне действительно нравится вывод типа, который typescript приводит в таблицу. Тем не менее - при получении объектов из HTTP-вызовов - я могу отнести их к нужному типу, получить завершение кода и функции вызова на них время компиляции, но это приводит к ошибкам выполнения
Пример:
class Person{
name: string;
public giveName() {
return this.name;
}
constructor(json: any) {
this.name = json.name;
}
}
var somejson = { 'name' : 'John' }; // Typically from AJAX call
var john = <Person>(somejson); // The cast
console.log(john.name); // 'John'
console.log(john.giveName()); // 'undefined is not a function'
Хотя это компилируется красиво - и intellisense предлагает мне использовать эту функцию, она дает исключение во время выполнения. Решением для этого может быть:
var somejson = { 'name' : 'Ann' };
var ann = new Person(somejson);
console.log(ann.name); // 'Ann'
console.log(ann.giveName()); // 'Ann'
Но это потребует от меня создания конструкторов для всех моих типов. В paticular, имея дело с древовидными типами и/или с коллекциями, входящими в AJAX-вызов, нужно было бы перебрать все элементы и новый экземпляр для каждого.
Итак, мой вопрос: есть ли более элегантный способ сделать это? То есть, приведение к типу и наличие прототипических функций для него немедленно?