1
我正在清理我的Angular 4应用程序的类型,并且我想定义负责API调用的Database
类的接口。我可以为一个类的方法定义一个泛型typescript接口吗?
这些类将有方法接收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>'
有什么建议?或者这是不可能的? 在此先感谢!
哇,我从来没有见过类似的东西,但现在的构造不适合签名:('住宅“API”的类型'ApiService'不能分配给字符串索引类型'(args:ItemsCriteria)=> Observable'.'似乎我应该坚持一个没有类型约束的约定。 –