我目前正在开发一个使用typescript的express应用程序。我目前正在开发一个认证中间件,我想知道你是否能以某种方式使中间件类型安全:
authenticateJwt = (
req: RequestWithToken,
res: Response,
next: () => void
) => {
// Append the decoded req.token to the req header so we can use it internally
const token = req.token;
// @ts-ignore
this.verifyJwt(token)
.then((decoded: Token) => {
req.token = decoded;
next();
})
.catch(() => res.status(401).send('Unauthorized'));
};
现在在我的路线中。ts:
router.get(
'/me',
// @ts-ignore
jwtService.authenticateJwt,
userController.getProfileFromUser
);
我不得不写// @ts-ignore,因为它说< code>'(req: RequestWithToken,res: Response,next: () =
RequestWelToken
的定义:
export interface RequestWithToken extends Request {
token: Token;
}
export interface Token {
username: string;
}
创建自定义.d.ts
并覆盖快速和快速服务静态核心
的请求接口
declare module 'express' {
interface Request {
token: Token;
}
}
declare module 'express-serve-static-core' {
interface Request {
token: Token;
}
}
这样,RequestHandlerParams
(通常是您的控制器)和RequestHandler
)(通常是中间件)都可以获得新的请求
接口。
然后将其添加到tsconfig.json
的files
部分:
"files": [
"src/custom.d.ts"
]
您是否尝试过:
const token = req.token as Token;