我正在清理我的Angular 4应用程序的类型,我想定义一个负责API调用的Database
类的接口。
这些类将有接收Criteria
个对象的方法,并返回大不相同的ResultItems[]
的Observable。所以我试图定义这个接口:
import { Observable } from 'rxjs/Observable';
export interface Database<C> {
[methodName: string]: (args: C) => Observable<any>;
}
涵盖接收Criteria
并返回any
内容的方法。
然后我尝试进行这种实现:
@Injectable()
export class ItemsDatabase<ItemsCriteria> implements Database<ItemsCriteria> {
constructor(private api: ApiService) {}
fetch(args: ItemsCriteria): Observable<APIResponse[]> {
return this.api.fetchItems(args);
}
summary(args: ItemsCriteria): Observable<SummaryResponse[]> {
return this.api.itemsSummary(args);
}
}
但是打字稿否认了这一点:
Class 'ItemsDatabase<ItemsCriteria>' incorrectly implements interface 'Database<ItemsCriteria>'.
Index signature is missing in type 'ItemsDatabase<ItemsCriteria>'
有什么建议吗?或者这是不可能的? 提前谢谢!
答案 0 :(得分:0)
您必须将索引签名添加到类
@Injectable()
export class ItemsDatabase<ItemsCriteria> implements Database<ItemsCriteria> {
constructor(private api: ApiService) {}
[methodName: string]: (args: ItemsCriteria) => Observable<any>;
fetch(args: ItemsCriteria): Observable<APIResponse[]> {
return this.api.fetchItems(args);
}
summary(args: ItemsCriteria): Observable<SummaryResponse[]> {
return this.api.itemsSummary(args);
}
}