Как импортировать интерфейс из модуля npm и позволить тому же интерфейсу расширять другой интерфейс в машинописи? - PullRequest
0 голосов
/ 30 июня 2019

У меня есть interface, представляющие структуры данных, которые должны оставаться согласованными в наших проектах веб-интерфейсов, бэкэндов и серверов API:

export interface IDataStructure {
    dataId: number;
    dataname: string;
}

То же IDataStructure используется в схеме базы данных mongoose, , например :

//datastructure.model.ts
import mongoose, { Schema, Document } from 'mongoose';

export interface IDataStructure extends Document {
    dataId: number;
    dataname: string;
}

const DataStructureSchema: Schema = new Schema({
  dataId: { type: Number, required: true, unique: true },
  dataname: { type: String, required: true, unique: true },
});

export default mongoose.model<IDataStructure>('DataStructure', DataStructureSchema);

В нашем проекте машинописи React используется тот же интерфейс IDataStructure. Например :

//home.tsx
import React from 'react';
export interface IDataStructure {
    dataId: number;
    dataname: string;
}

export interface IPageState {
    DataStructure: IDataStructure;
}

Итак, мы решили добавить весь общий код в закрытый репозиторий, который импортируется как модуль npm в проекты с именем common-models.

.

Использование IDataStructure в проекте React было простым:

//home.tsx
import React from 'react';
import commonModels from 'common-models';

export interface IDataStructure {
    dataId: number;
    dataname: string;
}

export interface IPageState {
    DataStructure: commonModels.IDataStructure;
}

Однако, в случае, когда этот интерфейс не только должен быть импортирован, но и должен расширять другой интерфейс, я застреваю для datastructure.model.ts.

Итак, вопрос в том, как импортировать внешний интерфейс IDataStructure в datastructure.model.ts из модуля npm 'common-models', который также расширяет другой интерфейс Document?

Я попробовал один выстрел вот так:

//datastructure.model.ts
import commonModels from 'common-models';

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

interface iDataStructure extends Document, commonModels.IDataStructure {

}

const DataStructureSchema: Schema = new Schema({
  dataId: { type: Number, required: true, unique: true },
  dataname: { type: String, required: true, unique: true },
});

export default mongoose.model<iDataStructure>('DataStructure', DataStructureSchema);

Теперь проблема в том, что iDataStructure - пустой интерфейс, но мне нужно, чтобы IDataStructure был непосредственно доступен внутри datastructure.model.ts, а также мог одновременно расширять Document.

Как мне это сделать?

...