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
类型的东西。
但是您可以创建一个将构造函数类型映射到其原始类型的类型(例如,Number
到 number
),然后使用它将架构对象转换为您想要的类型:
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' 不起作用