我正在使用一个用于API访问的类的类型库,该类库是由工具集自动生成的,该工具集定义了一个类(“ UserApi ”),该类具有扩展“基本”类( “ BaseApi ”)具有通用方法。还有一个模型界面“ 用户”;
这些类使用泛型来确保/保持类型安全。
我现在需要创建本身扩展了“ UserApi ”的第三类(属于我自己的类,不是库的一部分)。
我遇到的第一个问题是我想覆盖`find'方法(在“ BaseApi ”中定义)
所以,在我的课程“ MyClass ”中,我有
import {User} from 'sdk';
export class UserStoreService extends UserApi {
constructor(
) {
super();
}
public find(): Observable<User[]> {
return super.find();
}
}
“ BaseApi ”类中find
方法的定义是
public find<T>(): Observable<T[]> {
return this.request(
我收到语法错误
Property 'find' in type 'UserStoreService' is not assignable to the same property in base type 'UserApi'. Type '() => Observable<User[]>' is not assignable to type '<T>() => Observable<T[]>'.
Type 'Observable<User[]>' is not assignable to type 'Observable<T[]>'.
Type 'User[]' is not assignable to type 'T[]'.
Type 'User' is not assignable to type 'T'.
所以我想我将super.find()
更改为super.find<User>()
,但遇到了相同的错误
如何使这些函数调用匹配?
第二个问题是关于这里进行的课堂扩展的水平。这种想法让我震惊,如果我可以修改库使用的模板,实际上我可以只将代码的 all 全部生成到一个特定于模型的类中,而不是3。
我看到了几个优点
这有什么缺点?
答案 0 :(得分:1)
一种简单的解决方法可能是仅删除find
中UserStoreService
的替代。但是真正的问题是find
中BaseApi
的声明可能不是您想要的。这意味着每个BaseApi
实例(包括子类实例)必须为每种类型find
支持T
。您可能希望将T
作为类型BaseApi
(即BaseApi<T>
)的参数,并从<T>
方法中删除find
,以便每个子类可以指定它支持的单一类型T
。例如,UserApi
将扩展BaseApi<User>
。