adelkhalitov
@adelkhalitov
>

Как изменять интерфейсы у унаследованного класса typescript?

Всем привет. Решаю очень простую задачу, заблудился в 2х соснах.
Пишу дефолтный класс для работы с сущьностями которые буду сохранять в бд.

Я очень абстрагирова все свои проекты и пришел к выводу, что любая сущьность создается, обновляется, удаляется итп по одному и тому же алгоритму.
1) Принимаются данные
2) Валидируются
3) Дополняются
4) Сохраняются/Обновляются/Удаляются

Поэтому я решил написать общий класс взаимодействия с бд для всех сущьностей.
Так же это будет очень полезно, если я захочу вдруг поменять бд с монги на другую. То есть мне нужно переопределить только в 1м месте, и добавить некоторые валидаторы и пытаться изначально поддерживать общую структуру для любой бд.

Условный пример:
let _mongooseSchema!: Model<any>;

export interface DefaultInterfase {
    _id?: number;
}

export default class DefaultObject {
    set mongooseSchema(params: SchemaInitParams) {
        _mongooseSchema = mongoose.model(params.schemaName, new Schema(params.schema));
    }
    public async create(params: Create, helpersDataCB, hendlerCB ): Promise<DefaultInterfase> {
        const bulk = _mongooseSchema.collection.initializeOrderedBulkOp();
        const errors: Array<{ object: any; note: string }> = [];
        let helpersData; 
        await helpersDataCB(helpersData);
        params.list.map(el => {
            try {
                hendlerCB(el, helpersData)
                bulk.insert(el);
            } catch (e) {
                errors.push({ object: el, note: e.message });
            }
        });
        bulk.execute();
        return {some result};
    }
}


helpersDataCB - cb которая переопределяет helpersData и вытаскивает из бд другие сущьности
hendlerCB - cb который добавляет какие то данные в основной объект перед сохранением в бд.

По тому же принципу пишутся методы для поиска, апдейта итп.

Далее создается новый класс наследуя этот, коллекция замечательно создается, данные сохраняются и ищутся, но вот интерфейс данных остается базового класса (Promise < DefaultInterfase > ) и переопределить его объявляя новый клас представления не имею как.

create(): NewResult {
     super.create()
}

Думаю плохой вариант, если я добавлю или изменю что то в родительском классе, нужно будет проходиться по всем наследованным классам и добавлять ко всем интерфейсы.
Как быть?
  • Вопрос задан
  • 86 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы