gpt4 book ai didi

typescript - 正确输入经过身份验证的请求和未经身份验证的请求的请求类型?

转载 作者:行者123 更新时间:2023-12-05 05:33:27 25 4
gpt4 key购买 nike

目前我有一个如下所示的声明文件:

import { AuthenticatedUser } from ".";

export interface AuthenticatedRequest {
isAuthenticated: boolean;
sid: string | null;
locals: {
user: AuthenticatedUser | null;
};
}

declare global {
namespace Express {
export interface Request extends AuthenticatedRequest {}
}
}

我在我的中间件中分配这些值,所以我知道用户在未通过身份验证时将无法访问某些路由。问题是我必须在必须使用我的用户对象的每条路线上执行此操作:

  if (!req.locals?.user) {
return res
.status(StatusCodes.UNAUTHORIZED)
.json({ message: ReasonPhrases.UNAUTHORIZED });
}

const { user } = req.locals;

我如何告诉 typescript 用户已通过此路由的身份验证?我是否需要有一个单独的界面并将其导入到每个文件中,还是有更优雅的解决方案?

一如既往,感谢您的帮助。

最佳答案

通过传递通用负载作为第一个参数并导入到每个文件中(已经使用常规请求类型)解决了我的问题。

import type { AuthenticatedUser } from ".";
import type { Request as ExpressRequest } from "express";

type AuthenticatedRequestPayload = { sid: string; user: AuthenticatedUser };

type UnauthenticatedRequestPayload = {
sid: string | null;
user: AuthenticatedUser | null;
};

type PayloadOption = "authenticated" | "unauthenticated";

export type TargetedRequest<Auth = PayloadOption> =
Auth extends "authenticated"
? AuthenticatedRequestPayload
: UnauthenticatedRequestPayload;

export type Request<
Auth = PayloadOption,
P = Record<string, unknown>,
ResBody = unknown,
ReqBody = unknown,
ReqQuery = Record<string, unknown>
> = ExpressRequest<P, ResBody, ReqBody, ReqQuery> & TargetedRequest<Auth>;

关于typescript - 正确输入经过身份验证的请求和未经身份验证的请求的请求类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73842218/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com