我如何在打字稿中设计模型,使我的回答低于要求?
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 }
答案 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
,因为它们是不包含构造函数或方法的纯数据模型。除非您想使模型适合您的业务逻辑。