在全栈 typescript 项目中,我希望在前端项目中共享我在后端项目中使用的接口(interface)/类型,以避免代码重复并保持一致性。
通过搜索我发现这可以通过使用这些类型的第三个“共享”项目然后使用 typescript 的引用项目来包含它来完成。
所以我会有一个前端项目、后端项目和一个将由前两个项目引用的共享项目。
虽然我的类型扩展了 mongoose 的 Document 类型,但为了在前端和后端使用相同的类型,需要将 mongoose 捆绑在前端项目中。
在不将额外的后端包捆绑到前端的情况下共享这些接口(interface)/类型的正确方法是什么? (并保留来自 Document 扩展的 _id 属性)。
RoadBook.ts(IRoadBook是要共享的接口(interface)/类型和mongoose schema,模型声明)
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);
后端是一个简单的 typescript/express/mongoose 应用程序,前端是一个 react webapp,这可能很重要。
提前谢谢你。
最佳答案
你可以做的是在你的 ORM 中定义 IRoadBook
接口(interface),它不扩展 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);
关于node.js - 在不捆绑 ORM 的情况下在前后端之间进行类型共享,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59632587/