我想创建一个可重用的网络服务组件,该组件负责Item
的CRUD请求。
让我们说CatService
想要请求cats
列表,然后它可以有restService
个实例,它可以用它来列表,创建,更新,删除...
private restService:RestListService<Cat[]> = RestListService();
...
restService.list(urlToGetCats).then(cats => console.log(listdata));
...
restService.update(urlToUpdateACat, updatedCat);
我实现了这个通用组件,但它不够安全。类声明如下:
export class RestListService<T extends Array<Identifiable>> {
private dataSubject$: BehaviorSubject<T> = null;
list(url: string): Promise<T> { }
// PROBLEM: I cannot specify the `savingInstance` & the returned Promise type:
update(updateURL: string, savingInstance: Identifiable): Promise<Identifiable> { }
}
理想情况下,我会做一些事情,比如引入一个通用V
作为数组中项目的类型,以使数组(和整个类)更加类型安全:
export class RestListService<T extends Array<V extends Identifiable>> {
//Here the Promise is type safe:
update(updateURL: string, savingInstance: Identifiable): Promise<V> { }
}
但目前不允许(正如我所见)。
在这种情况下,我可以以某种方式解决类型安全问题吗?
感谢您的帮助!
答案 0 :(得分:1)
你的意思是这样吗?
export class RestListService<V extends Identifiable, T extends Array<V>> {
//Here the Promise is type safe:
update(updateURL: string, savingInstance: Identifiable): Promise<V> { }
}