TS报错:属性findOneTimeTokenCredentialsByEmail不存在于typeof CredentialsDao类型
问题原因
你收到的报错本质是调用方式和方法定义不匹配:findOneTimeTokenCredentialsByEmail是CredentialsDao类的实例方法,仅属于类的实例对象,不属于类本身,所以直接用CredentialsDao.方法名的类名调用方式会触发类型错误。
解决方法
方案1(推荐:符合现有类设计)
先实例化CredentialsDao类,再通过实例调用目标方法,同时注意该方法是异步方法,调用时需要加await,且必须传入必填的email参数:
// 1. 先实例化DAO类 const credentialsDao = new CredentialsDao() async disableOneTimeCredentials() { // 替换为实际业务需要查询的邮箱 const targetEmail = "user@example.com" // 2. 通过实例调用方法,必须加await处理异步返回 const emailAndOneTimeToken = await credentialsDao.findOneTimeTokenCredentialsByEmail(targetEmail) }
如果项目中CredentialsDao需要全局复用,可以直接在DAO文件中导出单例实例,避免重复实例化:
// CredentialsDao文件末尾追加代码 export const credentialsDao = new CredentialsDao() // 业务文件直接导入实例使用即可 import { credentialsDao } from './你的DAO文件路径'
方案2(不推荐,仅做说明)
如果你确实需要直接通过类名调用方法,可以将方法改为静态方法,但要注意静态方法内部无法访问this上的实例属性(你现有代码中的this.Model会报错,因此该方案不适用于你当前的场景):
// 仅做示例,你的场景不适用该修改 export class CredentialsDao { // 加static修饰符改为静态方法 static async findOneTimeTokenCredentialsByEmail(email: string): Promise<ICredential> { // 这里不能再用this.Model,需要替换为静态属性的访问方式 return XXXModel.findOne(...) } }
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

