typescript中的多级继承问题

typescript中的多级继承问题,typescript,Typescript,我正在使用一个用于api访问的typescript类库,它是由一个工具集自动生成的,该工具集定义了一个类(“UserApi”),该类具有扩展具有泛型方法的“基本”类(“BaseApi”)的特定方法。还有一个模型界面“用户”” 这些类使用泛型来确保/保持类型安全 我现在需要创建第三个类(我自己的,不是库的一部分),它本身扩展“UserApi” 我遇到的第一个问题是,我想重写“find”方法(在“BaseApi中定义) 所以,在我的课堂上,我有 我得到一个语法错误 Property 'find' i

我正在使用一个用于api访问的typescript类库,它是由一个工具集自动生成的,该工具集定义了一个类(“UserApi”),该类具有扩展具有泛型方法的“基本”类(“BaseApi”)的特定方法。还有一个模型界面“用户”

这些类使用泛型来确保/保持类型安全

我现在需要创建第三个类(我自己的,不是库的一部分),它本身扩展“UserApi

我遇到的第一个问题是,我想重写“find”方法(在“BaseApi中定义)

所以,在我的课堂上,我有

我得到一个语法错误

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'.