У меня проблема с определением типов для базового класса 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>'.
Я понимаю, что означает эта ошибка, но я не могу найти решение этой проблемы.