如何设计打字稿模型以便重新放置?

时间:2018-09-21 12:15:04

标签: angular typescript

我如何在打字稿中设计模型,使我的回答低于要求?

OneSignal.setEmail("test@test.com", {(error) => {
    //handle error if it occurred
}});

我尝试了什么:

{
    "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 }

3 个答案:

答案 0 :(得分:5)

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);
}

答案 1 :(得分:0)

data的类型应为model[],整个响应类型为responseModel

export class responseModel{
   data:model[];
}
export class model{
  name:string;
  id: number;
}

getInfo(): Observable<responseModel> {
// API HTTP Call
}

答案 2 :(得分:0)

我认为这是一个主观问题,因此我将在遇到类似情况时与我分享经验。

我的项目使用{ data: THE_DATA_OBJECT }响应的所有后端端点。我认为设计我所有的响应模型都以“数据”前缀开头有点多余,所以我没有这样做,而是在api服务中解包了“数据”前缀。

类似以下内容:

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

基本上,这使我不必做class responseModel<T>,因此我可以专注于自由设计真实模型,而不会让后端影响我的模型结构。

此外,对于响应模型,我总是使用interface而不是class,因为它们是不包含构造函数或方法的纯数据模型。除非您想使模型适合您的业务逻辑。