首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在猫鼬模式中使用雪花作为类型

问在猫鼬模式中使用雪花作为类型
EN

Stack Overflow用户
提问于 2021-06-22 18:38:18
回答 1查看 237关注 0票数 0

背景:Discord.js使用雪花(消息、成员、公会等)标识许多项目。在我的场景中,我使用雪花作为公会内部成员的唯一标识符,并在我的MongoDB数据库中作为主键。

Problem:我想在我的猫鼬模式中使用不和谐的雪花作为类型:

代码语言:javascript
复制
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是一种类型(本质上只是一种string)。

我绝对可以简单地使用string,但是我想知道是否有任何方法可以使它像上面所示的那样工作。我希望它非常明确,discordID字段中的值必须是Snowflake,而不是任何旧字符串。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-23 06:42:25

我发现了执行这些类型的最合适的方法,部分包括了由“by .MrMythical”和“Toasty”提供的答案。然而,他们的答案是不完整的,不应完全遵循,以实现我在这里的目标。

从本质上讲,经过几个小时的研究,我发现的解决方案是在模型创建时简单地添加一个输入接口。至少在VSCode中,Intellisense将识别这一点,并将根据接口中的内容在定义的模式参数上强制执行类型。

下面是一个例子:

MembershipModel.ts

代码语言:javascript
复制
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

代码语言:javascript
复制
import { Snowflake } from 'discord.js';

export default interface Membership {
    discordID: Snowflake;
    ieeeID: string;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68089144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档