Привет, я пытаюсь реализовать активную подпрограмму и журнал репозитория c с машинописным текстом. Но возникли некоторые проблемы с общими c типами.
У меня есть аннотация BaseModel
, в которой есть метод create, который возвращает себя и подтип самого себя. Для этого я сказал, что он вернет BaseModel
. В репозитории, который имеет общий тип c, расширенный от BaseModel
, я обернул свои методы модели и использовал общий тип c в качестве возвращаемого значения. Но когда я это делаю, это дает мне ошибку ниже.
'BaseModel' is not assignable to type 'T'. 'BaseModel' is assignable to the constraint of type 'T', but 'T' could be instantiated with a different subtype of constraint 'BaseModel'.
Когда я погуглил, нашел некоторые ответы, как это может произойти при повторном назначении generi c или дублировании в вложенные структуры. Но я не назначаю что-то и не определяю один и тот же generi c снова и снова
Почему я получаю эту ошибку типа и как ее решить?
Вот часть кода .
BaseModel.ts
export abstract class BaseModel {
protected constructor(private attributes: any[] = []) {
}
create(attributes: any[] = null): BaseModel {
return this;
}
// ...
}
BaseRepository.ts
export class Repository<T extends BaseModel> {
constructor(private model: T) {
}
create(attributes: any[]): T {
return this.model.create(attributes);
}
// ...
}