Typescript 声明合并 Express 请求对象和 Passport.js User/Session
Typescript Declaration Merging Express Request Object and Passport.js User/Session
我在 express/nodejs 应用程序中使用 passportjs 中间件进行身份验证。尽管已按照 Declaration Merging.
的步骤操作,但我的 request.user 对象的属性出现错误
我在我的项目根目录 /types/index.d.ts 创建了一个文件,并将以下内容添加到我的 tsconfig.json
"typeRoots": [
"/types/index.ts", "node_modules/@types"
]
我的全局声明合并如下所示:
import { User } from "../users/user.interface";
declare global {
namespace Express {
export interface Request {
user: User;
}
}
}
** 更新 **
通过将声明合并更改为模块扩充,我得到了 req.user
对象以停止抛出错误:
import { User } from "../users/user.interface";
declare module "express-serve-static-core" {
interface Request {
user: User;
}
}
引用 request.session
对象时出现以下错误:Property 'session' does not exist on type 'Request<ParamsDictionary, any, any, ParsedQs, Record<string, any>>'.
passport 的@types/passport 类型是否应该与 express 的请求对象合并以添加会话?
有谁知道我如何才能成功消除这些错误/让 TS 识别这个声明合并。我是打字稿的新手,已经能够解决我遇到的大部分问题,但这个问题一直在浮出水面。
要扩展 Passport 使用的 User
类型,您可以将声明合并到 global.Express.User
:
declare global {
namespace Express {
interface User {
/* declare your properties here */
}
}
}
@types/passport
do not define global.Express.Request#session
, that is defined by @types/express-session
here.
提供的类型定义
我在 express/nodejs 应用程序中使用 passportjs 中间件进行身份验证。尽管已按照 Declaration Merging.
的步骤操作,但我的 request.user 对象的属性出现错误我在我的项目根目录 /types/index.d.ts 创建了一个文件,并将以下内容添加到我的 tsconfig.json
"typeRoots": [
"/types/index.ts", "node_modules/@types"
]
我的全局声明合并如下所示:
import { User } from "../users/user.interface";
declare global {
namespace Express {
export interface Request {
user: User;
}
}
}
** 更新 **
通过将声明合并更改为模块扩充,我得到了 req.user
对象以停止抛出错误:
import { User } from "../users/user.interface";
declare module "express-serve-static-core" {
interface Request {
user: User;
}
}
引用 request.session
对象时出现以下错误:Property 'session' does not exist on type 'Request<ParamsDictionary, any, any, ParsedQs, Record<string, any>>'.
passport 的@types/passport 类型是否应该与 express 的请求对象合并以添加会话?
有谁知道我如何才能成功消除这些错误/让 TS 识别这个声明合并。我是打字稿的新手,已经能够解决我遇到的大部分问题,但这个问题一直在浮出水面。
要扩展 Passport 使用的 User
类型,您可以将声明合并到 global.Express.User
:
declare global {
namespace Express {
interface User {
/* declare your properties here */
}
}
}
@types/passport
do not define global.Express.Request#session
, that is defined by @types/express-session
here.