我在 TypeScript 中有以下接口和类:
export interface PageInterface<T> {
count: number;
previous: string;
next: string;
results: T[];
}
export class Page<T> implements PageInterface<T> {}
----------------------------------------------------------
export interface AdapterInterface<T> {
adapt(item: any): T;
}
我需要实施PageAdapter<Page<T>>
.
可能吗?我尝试了以下方法,但最终出现错误(键入"页面"si 不是通用的(:
export class PageAdapter<Page> implements AdapterInterface<Page> {
adapt(item: any): Page<T> {
return new Page<T>(item['count'], item['previous'], item['next'], item['results']);
}
}
如果我在第一行放Page<T>
而不是Page
,它根本不起作用。
我该如何实现这一点?
非常感谢,
我假设你正在寻找这样的东西:
export class PageAdapter<T> implements AdapterInterface<Page<T>> {
adapt(item: any): Page<T> {
return new Page<T>(item['count'], item['previous'], item['next'], item['results']);
}
}
因此,例如,PageAdapter<string>
可以用作AdapterInterface<Page<string>>
。 如果你真的需要泛型类型参数是一个类似Page
的类型,你可以写这样的东西:
export class PageAdapter2<P extends Page<any>> implements AdapterInterface<P> {
adapt(item: any): P {
return new Page(item['count'], item['previous'], item['next'], item['results']) as P;
}
}
在这里,PageAdapter<Page<string>>
可以用作AdapterInterface<Page<string>>
。 但是,此版本的类型并不那么干净,需要类型断言才能实现。
希望有帮助;祝你好运!
操场链接到代码