And*_*e M 2 enums mongoose mongodb node.js typescript
我们有一个基于 Typescript 的 NodeJs 项目,它使用 Mongoose。我们正在尝试找到一种合适的方法来基于 Typescript 枚举在 Mongoose 模式上定义枚举字段。我确实浏览了文档,但找不到任何值得注意的内容。
以枚举为例:
enum ETransactionType {
Buy = 'buy',
Sell = 'sell',
}
Run Code Online (Sandbox Code Playgroud)
和 Mongoose 模式:
const TransactionSchema = new Schema({
user: { type: Schema.Types.ObjectId, ref: 'User' },
product: { type: Schema.Types.ObjectId, ref: 'Product' },
transactionType: {
type: ETransactionType,
default: ETransactionType.Buy
}
});
Run Code Online (Sandbox Code Playgroud)
这是否足够,或者我们还应该从 TS 枚举中提取值,这样:
transactionType: {
type: ETransactionType,
default: ETransactionType.Buy,
enum: Object.values(ETransactionType)
}
Run Code Online (Sandbox Code Playgroud)
您需要使用第二个选项。
另外,type应该String代替枚举本身。
transactionType: {
type: String,
default: ETransactionType.Buy,
// no need to use Object.values(ETransactionType) after v5.11
enum: ETransactionType
}
Run Code Online (Sandbox Code Playgroud)
第一个在开发时间方面是足够的,但不会enum在运行时运行验证器。这就是为什么您需要拥有该enum: Object.values(ETransactionType)部分,它不会自动添加到架构定义中。
另外,值得注意的是 mongoose 目前不支持 TypeScript,我们计划在 5.11 版本中提供官方 TypeScript 定义。
| 归档时间: |
|
| 查看次数: |
1960 次 |
| 最近记录: |