在我们的Angular项目中,我们使用Typescript(2.2.2)。我在使用泛型,但我认为解决方案必须简单。
我们有一个简单的服务进行http调用:
getUsers(): Observable<any> {
return this._service.http.get('/api/users').map(...)
}
getItems(): Observable<any> {
return this._service.http.get('/api/items').map(...)
}
两个请求都返回具有此格式的对象(示例):
用户:
{
count: 1,
skip: 0,
take: 10,
objects: [
{ name: 'Jo', age: 24 },
{ name: 'Jane', age: 42 }
]
}
项目:
{
count: 1,
skip: 0,
take: 10,
objects: [
{ id: '54qds44', description: 'a great description' },
{ id: '987azex', description 'another description' }
]
}
我想将any
类型替换为我们返回的实际精确模型。
由于我在所有回复中都有共同点,所以我想这样做:
// I could be able to use this app wide
class GenericAPIResponseList<T> = {
count: number;
skip: number;
take: number;
objects: <T[]>
};
// And special models in this particular service
class User = {
name: string;
age: number;
}
class Item = {
id: string;
description: string;
}
然后在我的服务中:
getUsers(): Observable<GenericAPIResponseList<User>>
getItems(): Observable<GenericAPIResponseList<Item>>
但对于包含通用模型的#34;通用模型而言,这种语法似乎是不正确的。
我如何编写这个&#34;通用模型接受另一个模型的列表&#34;,然后将其放在我的Observable<>
返回定义中?
我读过有关接口或扩展但我有点迷失。
答案 0 :(得分:1)
你明白了,但是你有一些小的语法问题:) 请尝试以下方法:
// I could be able to use this app wide
class GenericAPIResponseList<T> {
count: number;
skip: number;
take: number;
objects: T[];
}
// And special models in this particular service
class User {
name: string;
age: number;
}
class Item {
id: string;
description: string;
}
function getUsers(): Observable<GenericAPIResponseList<User>> {
return this._service.http.get('/api/users').map(...);
}
function getItems(): Observable<GenericAPIResponseList<Item>> {
return this._service.http.get('/api/items').map(...);
}