Печатание для общего продолжения Entity - PullRequest
0 голосов
/ 31 октября 2019

У меня проблема с определением типов для базового класса BaseService, который я пишу для доступа к функциям sequelize. Вот как выглядит мой класс:

import { Model, Column } from 'sequelize-typescript'
import { BuildOptions } from 'sequelize'

type ModelStatic = typeof Model & {
    new (values?: object, options?: BuildOptions): Model
}

abstract class EntityService<Entity = any> {
    readonly entity

    constructor(e) {
        this.entity = e
    }

    async findAll(q = undefined): Promise<Entity[]> {
        return await this.entity.findAll(q)
    }
}

class UserEntity extends Model<UserEntity> {
    @Column
    name: string
}

class UserService extends EntityService<UserEntity> {
    constructor() {
        super(UserEntity)
    }

    foo() {
        const users = this.findAll()
        //Use the users here
    }
}

Мне нужно определить типы для универсального типа Entity, свойства entity и параметра q.

Приведенный выше кодработает отлично. Для набора текста я набрал Entity extends Model<any>, а затем установил тип entity на entity : ModelStatic;теперь я получаю предложения при наборе this.entity.findAll(), но затем получаю следующую ошибку.

Type 'Model<any, any>' is not assignable to type 'Entity'.
  'Model<any, any>' is assignable to the constraint of type 'Entity', but 'Entity' could be instantiated with a different subtype of constraint 'Model<any, any>'.

Я понимаю, что означает эта ошибка, но я не могу найти решение этой проблемы.

...