【发布时间】:2019-02-26 16:05:02
【问题描述】:
我正在使用 typescript 类库进行 api 访问,它是由定义类 ("UserApi") 的工具集自动生成的,该类具有扩展“基”类 ( "BaseApi") 具有通用方法。还有一个模型界面“User”;
这些类使用泛型来确保/保持类型安全。
我现在需要创建一个扩展“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>() 但得到了同样的错误
如何使这些函数调用匹配?
第二个问题是关于类扩展的级别。我突然想到,如果我可以修改库使用的模板,我实际上可以将 所有 代码生成为单个特定于模型的类,而不是 3。
我看到了几个优点
- 需要处理的文件更少
- 需要处理的泛型更少
- 更更容易阅读和维护代码
这有什么缺点?
- 增加包大小(基类为 29k (!)) - 所以每个模型文件都会增加这个数量
【问题讨论】:
-
这一行不好:public find(): Observable
{ return super.find(filter, customHeaders); } 你从哪里得到“filter”和“customHeaders”?它应该看起来更像这样: public find(filter: string, customHeaders: Object): Observable { return super.find(filter, customHeaders); } -
对不起,这是一个错字,我试图简化并忘记从帖子中删除这些内容。如果function和super都没有参数,报错还是一样
标签: typescript