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