У меня есть 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
.
Как мне это сделать?