interface DefaultResponse<T> {
  success: boolean;
  message?: string;
  user?: T;
}

export async function POST(req: Request) {
  const body: Pick<User, 'email' | 'password'> = await req.json();

  const user = await prisma.user.findUnique({ where: { email: body.email } });

  if (!user) {
    return new Response(
      JSON.stringify({ message: 'email is invalid', success: false }),
    );
  }

  return new Response(
    JSON.stringify({ message: '', sueecss: true, user }),
  ) as DefaultResponse<User>; // This method will not work.
}



上面的代码判断邮箱是否有效,如果匹配,则使用成员信息进行响应.

通过指定正文的类型 与上面的代码一样,我希望指定一个类型,以便在Success拼写错误时警告错误.如何在响应正文中指定类型?

推荐答案

您正在try 将值JSON.stringify(...)转换为DefaultResponse,这是一个字符串.这将是错误的,但不是您想要的原因.

我建议您改为键入处理程序函数的返回值,并使用Response.json()或(NextResponse.json(),如下所示:


import { NextResponse } from "next/server"

interface DefaultResponse<T> {
  success: boolean;
  message?: string;
  user?: T;
}

export async function POST(req: Request): Promise<NextResponse<DefaultResponse<User>>> {
  const body: Pick<User, 'email' | 'password'> = await req.json();

  const user = await prisma.user.findUnique({ where: { email: body.email } });

  if (!user) {
    return NextResponse.json({ message: 'email is invalid', success: false });
  }

  return NextResponse.json({ message: '', sueecss: true, user })
}

此外,您可能想要从从Prisma检索到的User对象中删除密码字段,然后在响应中将其发回.请参阅:https://www.prisma.io/docs/concepts/components/prisma-client/excluding-fields

Typescript相关问答推荐

错误:note_modules/@types/note/globals.d.ts:72:13 -错误TS 2403:后续变量声明必须具有相同的类型

如何使用属性作为具有Generics的TypScript类中的类型守护?

React-Native运行方法通过监听另一个状态来更新一个状态

ANGLE找不到辅助‘路由出口’的路由路径

类型,其中一条记录为字符串,其他记录为指定的

有条件地删除区分的联合类型中的属性的可选属性

如何将所有props传递给React中的组件?

对未到达受保护路由的路由环境做出react

如何将定义模型(在Vue 3.4中)用于输入以外的其他用途

如何将spread operator与typescripts实用程序类型`参数`一起使用

如何从对象或类动态生成类型

抽象类对派生类强制不同的构造函数签名

如果判断空值,则基本类型Gaurd不起作用

在Google授权后由客户端接收令牌

Rxjs将省略的可观测对象合并到一个数组中

有没有一种方法可以提升对象的泛型级别,而对象的值是泛型函数?

递归JSON类型脚本不接受 node 值中的变量

我可以在 Typescript 中重用函数声明吗?

错误:仅允许在‘使用服务器’文件中导出异步函数

类型string不可分配给类型string| 联盟| 的'