我尝试将一个通用类型默认分配给另一个,并在抽象类上的函数中返回受让人通用类型。我希望它对于扩展类来说是完全简单的,以便使用默认值覆盖它而不成功。
这是我的抽象类的一部分(简化):
export abstract class ServicioRest <T> {
public listarPorId<K = T>(entidad?: T): Promise<K> {
return new Promise<K>((resolve: Function, reject: (error: any) => void): void => {
//some code
});
}
}
这些是我尝试创建扩展类的一些方法。仅最后两个(4和5)就解决了:
1)
class EntityService extends ServicioRest<IEntity> {
public listarPorId(entidad?: IEntity): Promise<IEntity> {
return super.listarPorId(entidad);
}
}
2)
class EntityService extends ServicioRest<IEntity> {
public listarPorId<IEntity>(entidad?: IEntity): Promise<IEntity> {
return super.listarPorId(entidad);
}
}
3)
class EntityService extends ServicioRest<IEntity> {
public listarPorId(entidad?: IEntity) {
return super.listarPorId(entidad);
}
}
4)
class EntityService extends ServicioRest<IEntity> {
public listarPorId<K=IEntity>(entidad?: IEntity): Promise<K> {
return super.listarPorId(entidad);
}
}
5)
class EntityService extends ServicioRest<IEntity> {
public listarPorId<K>(entidad?: IEntity): Promise<K> {
return super.listarPorId(entidad);
}
}
不起作用的程序使编译器针对此错误发出警报:
src / app / modules / rest / models / servicio-rest.spec.ts(31,16)中的错误:错误TS2416:类型'EntityService'中的属性'listarPorId'无法分配给同一属性基本类型为“ ServicioRest”。
类型'(entidad ?: IEntity ...'不可分配给类型'<K = IEntity>
(entidad:IEntity ...'。
类型“ Promise <IEntity>
”不可分配给类型“ Promise <K>
”。
不能将类型“ IEntity”分配给类型“ K”。
尽管最后两个解决了,但我不喜欢它们,因为我不能将 K 限制为IEntity。有什么办法可以达到这种限制?