实体不可分配给基本类型Service <Entity>中的相同属性:另一个泛型上的泛型默认值

时间:2019-08-23 15:11:43

标签: typescript generics inheritance default

我尝试将一个通用类型默认分配给另一个,并在抽象类上的函数中返回受让人通用类型。我希望它对于扩展类来说是完全简单的,以便使用默认值覆盖它而不成功。

这是我的抽象类的一部分(简化):

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。有什么办法可以达到这种限制?

0 个答案:

没有答案