express-sessionで利用できるセッションを拡張して、独自の値を格納する方法についてです。
declare構文を使って、express-sessionモジュールのSessionDataに、interfaceを使って独自の型を生やします。
import express, { Request, Response } from 'express'; import session from 'express-session'; // SessionDataに独自の型を生やす declare module 'express-session' { interface SessionData { views?: number; } } const app = express(); // Configure session middleware app.use(session({ secret: 'your-secret-key', // replace with a secure key resave: false, saveUninitialized: true, cookie: { secure: false } // Set to true if using HTTPS })); app.get('/views', (req: Request, res: Response) => { // Access the session object if (req.session.views) { req.session.views++; } else { req.session.views = 1; } res.json({views: req.session.views}); }); app.listen(3000, () => { console.log('Server is running on port 3000'); });
この定義は他の場所からも使いたいことがほとんどなので、別ファイルにしてtsconfigのtypesやtypeRootsで読み込むと便利です。
express-session.d.tsを作成して、typesディレクトリに保存
import 'express-session'; declare module 'express-session' { interface SessionData { views?: number; } }
tsconfigで、types以下を読み込む
"typeRoots": ["./types"]
これでどのファイルからも独自の型を生やしたsessionが利用可能になります。