javascript - 在 Mongoose Schema 中使用雪花作为类型
问题描述
背景:Discord.js 使用雪花识别许多项目(消息、成员、行会等)。在我的场景中,我使用雪花作为公会内部成员的唯一标识符以及我的 MongoDB 数据库中的主键。
问题:我想在我的 Mongoose 模式中使用 Discord 的 Snowflake 作为类型:
import { Snowflake } from 'discord.js';
import { Schema } from 'mongoose';
const MembershipSchema: Schema = new Schema({
discordID: { type: Snowflake, required: true, unique: true },
});
但是,我从 VSCode 的 Intellisense 收到一个错误,告诉我'Snowflake' only refers to a type, but is being used as a value here.
我很困惑,因为我对 Discord.js 文档的解释是这Snowflake
是一种类型(基本上只是 a string
)。
我绝对可以简单地使用string
,但我想知道是否有任何方法可以使其工作类似于我上面显示的方式。我希望它非常明确,discordID
字段内的值必须是 a Snowflake
,而不是任何旧字符串。
解决方案
我发现执行类型的最合适方法部分包括@MrMythical 和@Toasty 提供的答案。但是,他们的答案不完整,不应该完全遵循以实现我的目标。
本质上,经过几个小时的研究,我发现的解决方案是在模型创建时简单地添加一个打字界面。至少在 VSCode 中,Intellisense 会认识到这一点,并将根据接口中的内容强制定义模式参数的类型。
一个例子如下所示:
MembershipModel.ts
import { model, Schema } from 'mongoose';
import Membership from '../interfaces/MembershipStorage';
const MembershipSchema: Schema = new Schema(
{
discordID: { type: String, required: true, unique: true },
ieeeID: { type: String, required: true, unique: true },
},
{
collection: 'members',
minimize: false,
strictQuery: true,
}
);
export default model<Membership>('Member', MembershipSchema);
MembershipStorage.ts
import { Snowflake } from 'discord.js';
export default interface Membership {
discordID: Snowflake;
ieeeID: string;
}
推荐阅读
- python - 小于或等于 0 - 不显示有 0 票的帖子
- python - 从 R 调用 Python 脚本时,未检测到 Selenium
- mysql - 当新记录添加到数据库(MySQL/Knex)时,为什么会跳过已删除记录的 ID 号?
- python - Python 和 Selenium 下载 0 KB excel 文件
- git - Gitflow 工作流程和支持分支
- iis - IIS 创建 (201) 响应压缩
- node.js - 我想用 nodemon 运行 babel 但收到错误代码:'MODULE_NOT_FOUND',
- javascript - 为什么在使用 styled-jsx 时没有应用这个关键帧动画?
- winapi - 如何通过 FindWindowW 从 unicode 窗口标题文本中查找窗口?
- c# - 在多对多关系中访问 EF Core 中最后一个表的属性