Совместное использование типов между внешним интерфейсом и внутренним сервером без объединения ORM - PullRequest
0 голосов
/ 07 января 2020

В проекте машинописи с полным стеком я * wi sh делюсь интерфейсом / типами, которые я использую в бэкэнд-проекте во внешнем проекте, чтобы избежать дублирования кода и сохранить согласованность.

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

Таким образом, у меня был бы проект Frontend, проект Backend и общий проект, на который ссылалась бы первые два.

Хотя мои типы расширяют тип документа mon goose, ведьма привела бы к необходимости связывать mon goose в проекте внешнего интерфейса, чтобы использовать одни и те же типы в обоих frontend и backend.

Как правильно использовать эти интерфейсы / типы, не связывая дополнительные внутренние пакеты с внешним интерфейсом? (и сохраняя свойство _id, которое исходит от расширения Document, пока мы на нем).

RoadBook.ts (IRoadBook - это интерфейс / тип для совместного использования и схема mon goose, объявление модели)

import mongoose, {Schema,Model,Document} from 'mongoose';

export interface IRoadBook extends Document {
    Name  : string;
    Description : string;
}

const RoadBookSchema = new Schema({
    Name : {type : String, required : true, unique: true},
    Description : {type : String }
});

export default mongoose.model<IRoadBook>('RoadBook',RoadBookSchema);

Может быть важно сослаться на то, что бэкэнд представляет собой простое приложение для машинописного текста / экспресс / мон goose и веб-приложение реакции на веб-интерфейс.

Спасибо заранее.

1 Ответ

1 голос
/ 08 января 2020

Что вы можете сделать, это определить интерфейс IRoadBook в вашем ORM, который не расширяет Document, за исключением элементов, которые вам нужны как во входном, так и во внутреннем. Затем на заднем конце определите схему.

ORM

export interface IRoadBook {
    _id: string; // or ObjectID or whatever type mongoose.Document['_id'] is
    Name: string;
    Description: string;
}

Задний конец

import mongoose, { Schema, Model, Document } from 'mongoose';
import { IRoadBook } from 'my-orm';

const RoadBookSchema = new Schema({
    Name: { type: String, required: true, unique: true },
    Description: { type: String }
});

export default mongoose.model<IRoadBook & Document>('RoadBook', RoadBookSchema);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...