Prisma ORM“findUnique”方法的类型提示结果

问题描述 投票:0回答:1

我对 TypeScript 的使用还很陌生,并且了解类型提示的强大概念。但这可能有点让人不知所措。我在使用express的TypeScript项目中使用Prisma ORM,并且在使用findUnique方法的结果时遇到一些问题。让我解释一下。

我创建了一个简单的用户模型:

// prisma/schema/user.prisma

model User {
  id            String @id @default(cuid())
  firstname     String
  lastname      String
  email         String @unique
  password      String
  salt          String?
  sessionToken  String? @unique
}

然后我有一个帮助程序文件,可以执行所有需要的操作,例如获取用户、创建等。让我们以通过电子邮件检索用户的函数为例。

// src/helpers/users.ts

export const getUserByEmail = (email: string) => prisma.user.findUnique({
    where: { email },
})

最后,我有一个执行登录操作的控制器,在这个文件中,我通过电子邮件检索用户并检查密码哈希

// src/controllers/authentication.ts

export const login = async (req: express.Request, res: express.Response) => {
    try {
        const { email, password } = req.body

        if (!email || !password) {
            res.sendStatus(HttpStatus.BAD_REQUEST)
        }

        let user = await getUserByEmail(email)

        if (!user) {
            return res.sendStatus(HttpStatus.BAD_REQUEST)
        }

        const expectedHash = authentication(user.salt, password)

        // ...

        return res.status(HttpStatus.OK).json(user).end()
    } catch (error) {
        console.error(error)
        return res.sendStatus(HttpStatus.BAD_REQUEST)
    }
}

所以,我的问题就在这里:

user.salt
,因为我得到未解决的可变盐。我试图告诉我我想要一个用户作为响应,但没有成功。

import { User } from '@prisma/client'

// ...

let user: User | null = await getUserByEmail(email)

但是我有一个很长的错误,说初始化程序类型 Prisma__UserClient<$Result.GetResult,{where:{email:string}},“findUnique”> | null、null、$Extensions.DefaultArgs> 不可分配给变量类型 User |空

我对这种带有很多子类型和/或变量的长类型有点困惑,它可能很简单,但现在我迷路了。你能解释一下我错过了什么吗?

typescript prisma type-hinting
1个回答
0
投票

这应该有效:

// src/helpers/users.ts

export const getUserByEmail = (email: string) => prisma.user.findUnique({
    where: { email },
    include: { salt: true }
});
© www.soinside.com 2019 - 2024. All rights reserved.