TYPESCRIPT - 快速会话处理

x2c*_*ese 2 express typescript express-session

我正在努力在我的 TS 项目中设置快速会话。当我进行基本设置(JS 方式)时,我创建了一个在每个 API 需求时调用的 MW,这样我就可以在会话中创建或不创建新的用户数组。

import {Request, Response, NextFunction} from 'express'

module.exports = (req: Request, res: Response, next: NextFunction) => {
    console.log('session checker : ', req.session)
    if (!req.session){
        req.session.user = []
        console.log('session initialized')
    }
    next();
}

Run Code Online (Sandbox Code Playgroud)

斗争在于 .user,TS 向我显示此错误

Property 'user' does not exist on type 'never'.
Run Code Online (Sandbox Code Playgroud)

你有办法克服它吗?

提前致谢,

保罗

tud*_*ely 7

根据Express-Session 类型的源代码,您需要自己定义 SessionData 中可用的属性(在代码库中的某个位置):

    /**
     * This interface allows you to declare additional properties on your session
object using [declaration merging]
(https://www.typescriptlang.org/docs/handbook/declaration-merging.html).
     *
     * @example
     * declare module 'express-session' {
     *     interface SessionData {
     *         views: number;
     *     }
     * }
     *
     */
    interface SessionData {
        cookie: Cookie;
    }
Run Code Online (Sandbox Code Playgroud)

我建议您这样做,因为您更了解用户拥有哪些属性:

例如(也许您有不同的数据)在项目的 index.d.ts 文件中:

     declare module 'express-session' {
         interface SessionData {
             user: string;
         }
     }
Run Code Online (Sandbox Code Playgroud)

  • 在我的 .d.ts 文件顶部导入表达式会话之前,我遇到了错误,例如“从‘express-session’导入会话;’” (2认同)