覆盖扩展类中的方法

时间:2018-09-06 09:17:52

标签: typescript typescript-typings

我输入以下内容:

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”。             “记录”类型中缺少“记录”属性。

我应该怎么做?

1 个答案:

答案 0 :(得分:0)

子类化的要点是子类的对象与超类的接口兼容,因此您不能任意更改方法返回类型。相反,可以考虑编写一个公共的超类,该类具有除call方法之外的所有功能,并编写两个单独的子类,每个子类定义具有不同返回类型的call方法。