typescript中的多级继承问题
我正在使用一个用于api访问的typescript类库,它是由一个工具集自动生成的,该工具集定义了一个类(“UserApi”),该类具有扩展具有泛型方法的“基本”类(“BaseApi”)的特定方法。还有一个模型界面“用户”” 这些类使用泛型来确保/保持类型安全 我现在需要创建第三个类(我自己的,不是库的一部分),它本身扩展“UserApi” 我遇到的第一个问题是,我想重写“find”方法(在“BaseApi中定义) 所以,在我的课堂上,我有 我得到一个语法错误typescript中的多级继承问题,typescript,Typescript,我正在使用一个用于api访问的typescript类库,它是由一个工具集自动生成的,该工具集定义了一个类(“UserApi”),该类具有扩展具有泛型方法的“基本”类(“BaseApi”)的特定方法。还有一个模型界面“用户”” 这些类使用泛型来确保/保持类型安全 我现在需要创建第三个类(我自己的,不是库的一部分),它本身扩展“UserApi” 我遇到的第一个问题是,我想重写“find”方法(在“BaseApi中定义) 所以,在我的课堂上,我有 我得到一个语法错误 Property 'find' i
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'.
类型“UserStoreService”中的属性“find”不可分配给基类型“UserApi”中的相同属性。类型“()=>Observable”不可分配给类型“()=>Observable”。
类型“Observable”不可分配给类型“Observable”。
类型“User[]”不可分配给类型“T[]”。
类型“User”不可分配给类型“T”。
所以我想我应该将super.find()
更改为super.find()
,但得到了相同的错误
如何使这些函数调用匹配
第二个问题是关于在这里进行的类扩展的级别。我突然想到,如果我可以修改库使用的模板,我实际上可以将所有代码生成到单个特定于模型的类中,而不是3个
我看到了几个优点
- 要处理的文件更少
- 需要处理的泛型更少
- 更易于阅读和维护的代码
- 包大小的增加(基类是29k(!)-所以每个模型文件都会增加这个数量
UserStoreService
中的find
覆盖。但真正的问题是BaseApi
中的find
声明可能不是您想要的。这意味着每个BaseApi
实例(包括子类实例)必须为每个类型T
支持find
。您可能希望将T
设置为BaseApi
的类型参数(即BaseApi
)并从find
方法中删除
,这样每个子类都可以指定它支持的单个类型T
。例如,UserApi
将扩展BaseApi这一行是错误的:public find():Observable{return super.find(filter,customHeaders);}。从哪里获得?”filter”和“customHeaders”?它应该看起来更像:public-find(filter:string,customHeaders:Object):可观察的{return super.find(filter,customHeaders);}抱歉,这是一个输入错误,我试图简化,但忘了从帖子中删除这些。如果函数和超级都没有参数,错误仍然是一样的。这正是我所想的-我非常困惑为什么方法会在baseApi中定义为那样。我会联系原始开发人员,问他directly、 它可以解决几个问题;)谢谢!
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'.