TypeScript中通用类类型的属性的简写

时间:2019-09-09 14:58:46

标签: typescript generics

我有一组TypeScript接口,我正在尝试编写一个通用类来使用它们。他们看起来像这样:

export interface GlobalHistory {
   items: ItemHistory[];
}

export interface ItemHistory {
   snapshots: ItemSnapshot;
}

export interface ItemSnapshot {
   inUse: boolean;
}

我想创建一个泛型类,以确保所有实例将仅使用实现GlobalHistory或其内部接口的类作为其某些属性和方法的类型。一种可能的方法是这样写:

export abstract class SomeClass<
    T extends GlobalHistory,
    U extends ItemHistory,
    V extends ItemSnapshot
>

但是,这在定义具体类时非常罗word,使用起来也很不舒服,所以我意识到我也可以这样做:

export abstract class SomeClass<T extends GlobalHistory> {
    public someMethod(): GlobalHistory.items[0] { ... }
    // returns ItemHistory

    public someOtherMethod(): GlobalHistory.items[0].snapshots[0] { ... }
    // returns ItemSnapshot
}

从技术上讲,这可以达到我想要的目的,但是却无法清楚地传达期望的返回值。因此,我想知道的是,是否有一种更清洁,更清晰的方法来实现此目的-不会强迫通用类的用户指定三个类型参数而不是一个,而是要使通用类可读。

谢谢!

0 个答案:

没有答案