[TypeScript]expressのセッションに独自の型を定義する

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が利用可能になります。

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク