将响应映射到模型 - 最佳实践

时间:2017-12-15 12:24:51

标签: javascript json angular httpclient observable

快速了解Angular 4,5,并想知道将JSON响应映射到强类型对象/模型的最佳实践。

服务:

getUsers(): Observable<User[]> {
  return this.http.get<User[]>('http://localhost:8000/users/')
    .pipe(
      tap(users => this.log(`fetched users`)),
      map(response => {
        return response.map((res) =>
        {
          return new Hero(
            response['username'],
            response.email);
        });
      }),
      catchError(this.handleError('getUsers', []))
    );
}

接口/型号:

export interface IUser {

    id: number;
    name: string;
    email: string;
}

export class Hero implements User {

    public id: number;

    constructor(public name: string,
            public email: string) {

  }
}

getUsers返回带有用户对象的Observable数组。 username不是该Object的成员,因此我使用此括号表示法,因为点符号会出错。显然,我最终会将Map函数转换为单独的函数,以实现可测试性/清晰度。

如何正确处理此映射/重映射/转换?

1 个答案:

答案 0 :(得分:0)

你给自己带来了太多麻烦。

export interface IUser {
  id: number;
  username: string;
  email: string;
}

getUsers(): Observable<User[]> {
  return this.http.get<User[]>('http://localhost:8000/users/')
    .catch(err => this.handleError('getUsers', []));
} 

你去,你的回复是打字的。

将Typescript视为开发帮助。在编码期间使用类等非常有用,但是一旦构建了应用程序,它就会被编译为Javascript,从而“丢失”所有类和属性。

你不应该为此考虑太多。只求最简单,它应该工作。否则,你仍然有一个TS linter来告诉你你的错误在哪里!