You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Typegoose:如何将类作为函数参数类型并实现类型检查?

如何将Typegoose定义的类作为函数参数类型

直接使用Typegoose定义的类作为函数参数类型是完全可行的,你代码里authToCheck: Auth的写法本身就能实现类型检查与代码补全——Typegoose的类在TypeScript中本身就是合法类型,TypeScript会根据类中的@prop装饰器自动推断属性类型。

不过你的代码存在异步逻辑处理问题,AuthModel.findOne返回的是Promise对象,无法同步获取结果,同时需要处理查询结果为空的场景,以下是修正后的完整代码:

import { prop, getModelForClass, DocumentType } from '@typegoose/typegoose';

class Auth {
  @prop({ required: true })
  public groupName!: string;

  @prop({ type: () => [String] })
  public rights?: string[];
}
    
export const AuthModel = getModelForClass(Auth);

// 改为异步函数,明确返回值类型,同时用DocumentType<Auth>标记查询结果类型
const checkRights = async (authToCheck: Auth): Promise<boolean | undefined> => {
  const authGroup = await AuthModel.findOne({ groupName: authToCheck.groupName });
  
  // 处理分组不存在的情况
  if (!authGroup) {
    return false; // 可根据业务需求返回undefined或抛出错误
  }
  
  const allRightsOk = authToCheck.rights?.every(el => authGroup.rights?.includes(el));
  return allRightsOk;
}

几个关键说明:

  • DocumentType<Auth>是Typegoose提供的专用类型,用于表示从数据库查询出的文档实例,它包含Auth类的所有属性,同时附带Mongoose文档的原生方法(如save()、toJSON())。如果不需要文档方法,直接用Auth作为查询结果类型也可以,但DocumentType<Auth>的类型描述更准确。
  • 确保TypeScript配置中开启strict: true,能最大化利用Typegoose的类型推断能力,避免空值、未定义等潜在问题。
  • 如果authToCheck参数可能是数据库返回的文档实例,也可以将参数类型改为DocumentType<Auth>,它兼容普通Auth对象与数据库文档实例。

内容的提问来源于stack exchange,提问作者crivella

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 09:22:41