我们有一个使用Mongoose的基于Typescript的NodeJs项目。我们正在尝试基于Typescript枚举找到在Mongoose模式上定义枚举字段的适当方法。我确实浏览了文档,但找不到任何注意事项。
以列举枚举为例:
enum ETransactionType {
Buy = 'buy',
Sell = 'sell',
}
和猫鼬模式:
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)
}
答案 0 :(得分:1)
您需要使用第二个选项。
第一个就开发时间而言已足够,但不会在运行时中运行enum
验证程序。这就是为什么您需要拥有enum: Object.values(ETransactionType)
部分,而不会将其自动添加到架构定义的原因。
此外,值得注意的是,猫鼬当前不支持TypeScript we're planning to have official TypeScript definitions in version 5.11。