在具有泛型类型的方法中,我想辨别该对象以便将其强制转换并调用子类的方法。
我有从“ BaseModel”类扩展的类(User,Address等)。 我有一个使用通用类型T扩展BaseModel的存储库类。
在这些存储库中,我想从子类中调用“ fromJson”函数。 通过T.fromJson,或者尝试通过开关检查对象的类型,或者其他任何可能性...
export class RepositoryService<T extends BaseModel> {
constructor(protected api: ApiService) {}
findById(id: number): Observable<T> {
return this.api.findById(id).pipe(
map((o) => {
// return T.fromJson(o);
// OR
// switch(T) {
// case User:
// return User.fromJson(o);
// case Address:
// return Address.fromJson(o);
// }
})
);
}
}
但是这两种方法不起作用。
如何成功完成此操作?
谢谢。
答案 0 :(得分:1)
诸如T
之类的打字稿注释在运行时不存在,因此您不能使用T
来确定类型。但是,您可以使用构造函数来注入对此RepositoryService
所针对的类的引用。
这些类型可能不太正确,但是希望这可以使您走上正确的道路:
interface JsonConstructable<T> {
fromJson(json: string): T;
}
export class RepositoryService<T extends BaseModel> {
constructor(protected api: ApiService, private readonly modelClass: JsonConstructable<T>) {}
findById(id: number): Observable<T> {
return this.api.findById(id).pipe(
map((o) => {
this.modelClass.fromJson(o);
})
);
}
}