Mongoose Schema 类型作为 TypeScript 的自定义接口?

Posted

技术标签:

【中文标题】Mongoose Schema 类型作为 TypeScript 的自定义接口?【英文标题】:Mongoose Schema type as a custom interface from TypeScript? 【发布时间】:2021-06-19 16:33:26 【问题描述】:

我想存储一个具有 StationRating 接口属性的自定义对象,有人可以帮我吗?

【问题讨论】:

***.com/questions/28379788 【参考方案1】:

这是可能的,但它需要一些样板文件。问题是:

TS 中的接口和类型在发出的代码中不存在

虽然您可以朝另一个方向发展 - 创建一个模式对象并从中创建一个接口/类型 - 模式对象值必须是 构造函数,例如 Number,这是不一样的像 number 类型的东西。

但是您可以创建一个将构造函数类型映射到其原始类型的类型(例如,Numbernumber),然后使用它将架构对象转换为您想要的类型:

type ConstructorMapping<T> =
    T extends NumberConstructor ? number :
    T extends StringConstructor ? string : never; // etc: continue as needed

const schemaObj = 
  score: Number,
  user_id: String,
  station_id: String,
  description: String,
;

type SchemaObj = typeof schemaObj;
type StationRating = 
    [prop in keyof SchemaObj]: ConstructorMapping<SchemaObj[prop]>
;

然后在调用new Schema时使用schemaObj,你也会有以下可用类型:

type StationRating = 
    score: number;
    user_id: string;
    station_id: string;
    description: string;

值得吗?我不知道。对于较小的物体,也许不是。对于较大的物体,也许是这样。您可能更喜欢只写出类型和架构对象。

【讨论】:

有一些像 typegoose 这样的包可以自动化其中的一些。

以上是关于Mongoose Schema 类型作为 TypeScript 的自定义接口?的主要内容,如果未能解决你的问题,请参考以下文章

如何实现 type:(new mongoose.Schema) as Array

在 Mongoose Schema 中使用 _id 作为属性类型时出错

Mongoose Schema 类型作为 TypeScript 的自定义接口?

Nodejs,Mongoose,Express:类型:Schema.ObjectId,参考:'Account' 不起作用

如何在猫鼬中将对象字段作为数组获取?

Mongoose:schema.index 多行