我输入以下内容:
export class CallBuilder<T extends Record> {
constructor(serverUrl: string)
call(): Promise<CollectionPage<T>>;
cursor(cursor: string): this;
limit(limit: number): this;
order(direction: 'asc' | 'desc'): this;
stream(options?: { onmessage?: (record: T) => void, onerror?: (error: Error) => void }): () => void;
}
export interface CollectionPage<T extends Record> {
records: T[];
next: () => Promise<CollectionPage<T>>;
prev: () => Promise<CollectionPage<T>>;
}
export interface Record {
_links: {
[key: string]: RecordLink
};
}
我想在不同的类中重写CallBuilder中的call()方法,使其具有相同的功能,除了call()返回。
export class PagedCallBuilder<T extends Record> extends CallBuilder<T> {
call(): Promise<T>;
}
call()行显示以下错误:
类型为'PagedCallBuilder'的属性'call'无法分配给 基本类型为“ CallBuilder”的相同属性。输入'()=> Promise' 不能分配给类型'()=> Promise>'。 类型“ Promise”不可分配给类型“ Promise>”。 类型“ T”不可分配给类型“ CollectionPage”。 类型“记录”不能分配给类型“ CollectionPage”。 “记录”类型中缺少“记录”属性。
我应该怎么做?
答案 0 :(得分:0)
子类化的要点是子类的对象与超类的接口兼容,因此您不能任意更改方法返回类型。相反,可以考虑编写一个公共的超类,该类具有除call
方法之外的所有功能,并编写两个单独的子类,每个子类定义具有不同返回类型的call
方法。