ТЛ; Др: мне нужно иметь скомпилированную машинопись определения прототипа, примененное к объектам I определили быть из этого класса.Продлить объект JavaScript-прототип машинописи класса
Ситуация: мне нужно расширить объект JavaScript с помощью какой-то бизнес-логикой, определенной в классе машинопись.
Это может выглядеть примерно так:
class Address
{
constructor(
public Street: string,
public Number: number,
public Zip: number,
public City: string)
{ }
public get FullAddress()
{
return this.Street + ' ' + this.Number + ', '
+ this.Zip + ' ' + this.City;
}
}
Составленный JS добавляет код для расширения объекта-прототип FullAddress
. Если я звоню new Address('Somestreet', 5, 3564, 'SomeCity')
, все работает как шарм.
Проблема: когда я получаю некоторый объект JS (в моем случае с помощью углового-х $http
)
$http.get('/api/address').then((answer: AngularPromise<Address[]>) =>
{
console.log(answer.data[0].FullAddress());
});
Я могу вызвать функцию FullAddress
на объекте, так как в машинописном функция определена на определение класса.
Теперь, когда я выполнить код в браузере answer.data.FullAddress()
не определен (что имеет смысл, поскольку Машинопись только обеспечивает определение типа и никогда не касалась объекта
Покушения Решения:. Одно из возможных решений быть вызов конструктора для каждого объекта (несколько, как следующее)
$http.get('/api/address').then((answer: AngularPromise<Address[]>) =>
{
for(var i = 0; i < answer.data.length; i++)
{
answer.data[0] = new Address(answer.data[0].Street, ans.....);
}
console.log(answer.data[0].FullAddress());
});
и, возможно, перегружать Address
конструктор принять компл ete для уменьшения шаблона.
Действительный Вопрос: Поскольку объект мне нужен способ более сложная вложенная структура, чем та простая адресной конструкция, описанной здесь, выше решения потребовала бы мне написать огромное количество шаблонного, и я чувствую, как там должно быть лучшим решением этой проблемы.
Интересный подход ... все еще чувствует себя немного шаткий, но уже путь лучше. Моя проблема: я боюсь, что это работает только на внутренних модулях, правильно (поскольку я использую свои классы в Angular и NodeJS, я использую только внешние модули: |) – Aides