Я использую TypeScript для создания приложения, и я делаю вызовы API для извлечения объектов. Например, у меня есть машинопись User
объекта, как это:Тип машинописного объекта от JSON
export class User {
id : number;
name : string;
email : string;
}
И мой API возвращает
{
"id" : 3,
"name" : "Jonn",
"email" : "[email protected]"
}
Я хочу, чтобы преобразовать этот JSON в User
. Я читал в других постов, я могу это сделать:
let user : User = <User> myJson;
Это, кажется, работает. Я могу получить доступ к свойствам пользователя, например user.name
, но моя проблема в том, что если класс User
реализует какой-либо метод, свойства недоступны. Например, если внутри User
класса у меня есть это:
getUppercaseName() : string {
return this.name.toUppercase();
}
Это происходит: user.name
возвращается John
но user.getUppercaseName()
возвращает undefined
Что происходит? Как решить эту проблему
Я думаю, что вопрос заключается в том, как преобразовать данные json в конкретный экземпляр класса. Что-то вроде этого должно работать (при условии, что есть конструктор пользователя), но дает мне ошибку, когда я использую результат в ngIf return this._http.get (this.urll) .map ((res: Response) => res .json()) .map (obj: any => {return new User (obj.number, obj.name, obj.email);}) – rook
@rook Нет необходимости использовать 'map' дважды .. это должно work: 'this._http.get (this.urll) .map ((res: Response) => {let json = res.json(); возвращает нового пользователя (json.id, json.name, json.email); }) '. Какая у вас ошибка? –
Да, это короче, но ошибка одна и та же: не удается найти отличающийся поддерживающий объект «объект объекта» типа «объект». NgFor поддерживает только привязку к Iterables, например массивы. – rook