如何设计打字稿模型以进行响应?

问题描述 投票:3回答:3

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

{
    "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
}
angular typescript
3个回答
5
投票

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

@Angular StyleGuide考虑使用数据模型的接口。

@Angular StyleGuide

0
投票

[export interface Model{ id: number; name: string; } export interface ResponseModel{ data:Array<Model>; } getInfo(): Observable<responseModel>{ return this._httpClient.get<resposneModel>('url); } 应该具有类型data,并且整个响应类型是model[]

responseModel

0
投票

我认为这是一个主观的问题,所以我会在遇到类似情况时与我分享经验。

[带有export class responseModel{ data:model[]; } export class model{ name:string; id: number; } getInfo(): Observable<responseModel> { // API HTTP Call } 的项目响应的所有后端端点。我认为设计我所有的响应模型都以“数据”前缀开头有点多余,所以我没有这样做,而是在api服务中解包了“数据”前缀。

类似于以下内容:

{ 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,因为它们是不包含构造函数或方法的纯数据模型。除非您想使模型适合您的业务逻辑。

© www.soinside.com 2019 - 2024. All rights reserved.