代码之家  ›  专栏  ›  技术社区  ›  Var

如何为respose设计typescript模型?

  •  3
  • Var  · 技术社区  · 6 年前

    {
        "data":[
                {
                    "name": "XYZ",
                    "id": "1"
                },
                {
                    "name" :"Abc",
                    "id": "2"
                }
            ]
    }
    

    我尝试的是:

    export class responseModel<T>{
        data:T;
    }
    
    export class model{
        name:string;
        id: number;
    }
    

    你有什么建议?所有数据将作为 { data: THE_DATA_OBJECT }

    {
        data: []
    }
    
    getInfo(): Observable<responseModel<model[]>> {
        // API HTTP Call
    }
    
    3 回复  |  直到 5 年前
        1
  •  6
  •   Vikas RyanSand20    6 年前

    A class is unsuitable for declaring a type that represents an HTTP response. Use interface or type instead 因为从HTTP请求得到的反序列化JSON值永远不会是类的实例

    @Angular StyleGuide
    数据模型的接口。

    export interface Model{
            id: number;
            name: string;
        }
    
    export interface ResponseModel{
             data:Array<Model>;
      }
    
    getInfo(): Observable<responseModel>{
    return this._httpClient.get<resposneModel>('url);
    }
    
        2
  •  0
  •   Sachila Ranawaka    6 年前

    data model[] 整个反应类型是 responseModel

    export class responseModel{
       data:model[];
    }
    export class model{
      name:string;
      id: number;
    }
    
    getInfo(): Observable<responseModel> {
    // API HTTP Call
    }
    
        3
  •  0
  •   Xinan    6 年前

    我认为这是一个主观的问题,所以我会分享我的经验,当我有一个类似的情况。

    { data: THE_DATA_OBJECT }

    如下所示:

    genericHttpCall<T>(path: string, method: string, params: any}: Observable<T> {
      return this.httpClient.request().pipe(map(response => response.data));
    }
    

    所以基本上我不用这么做 class responseModel<T> 这样我就可以专注于自由设计真实的模型,而不是让后端影响我的模型结构。

    interface 而不是 class