【问题标题】:Typescript enums assigned to a Mongoose enum?分配给猫鼬枚举的打字稿枚举?
【发布时间】:2020-11-09 21:29:46
【问题描述】:

我们有一个使用 Mongoose 的基于 Typescript 的 NodeJs 项目。我们正在尝试找到一种合适的方法来基于 Typescript 枚举在 Mongoose 模式上定义枚举字段。我确实浏览了文档,但找不到任何值得注意的内容。

以枚举为例:

enum ETransactionType {
    Buy = 'buy',
    Sell = 'sell',
}

还有一个 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
   }
});

这是否足够,或者我们是否也应该从 TS 枚举中提取值,例如:

transactionType: {
   type: ETransactionType,
   default: ETransactionType.Buy,
   enum: Object.values(ETransactionType)
}

【问题讨论】:

    标签: node.js mongodb typescript mongoose enums


    【解决方案1】:

    简答:

    您需要使用第二个选项。

    另外,type 应该是 String 而不是枚举本身。

    transactionType: {
       type: String,
       default: ETransactionType.Buy,
       // no need to use Object.values(ETransactionType) after v5.11
       enum: ETransactionType
    }
    

    长答案:

    第一个在开发时间方面是足够的,但不会在运行时运行enum 验证器。这就是为什么您需要拥有 enum: Object.values(ETransactionType) 部分的原因,它不会自动添加到架构定义中。

    另外,值得注意的是,mongoose 目前不支持 TypeScript,we're planning to have official TypeScript definitions in version 5.11。

    【讨论】:

    • 在看到项目的 GitHub issue tracker 中的答案后回到这个问题,简短的回答似乎是错误的,因为“类型”应该是字符串或枚举的任何值类型。跨度>
    • 谢谢,已修复。 ?
    猜你喜欢
    • 1970-01-01
    • 2020-04-30
    • 2020-01-29
    • 2019-03-04
    • 2017-06-26
    • 2017-05-09
    • 1970-01-01
    • 2014-09-20
    • 2020-10-27
    相关资源
    最近更新 更多