typescript 无法修改会话对象express-session

zpf6vheq  于 2023-03-24  发布在  TypeScript
关注(0)|答案(1)|浏览(167)

我知道有很多关于这个的主题,但我花了过去2个小时搜索,没有任何帮助。
你好,我有一个非常困难的时间试图扩展会话对象的express-session在typescript。
我有以下文件
src/types/express/index.d.ts

import account_document from "../account/account-document"
import xcsrftoken from "../data-types/x-csrf-token"

declare global {
    namespace Express {
        interface Request {
            authenticated_user: account_document
        }
        interface SessionData {
            xcsrftoken: xcsrftoken
        }
    }
}

src/types/express-session/index.d.ts

import xcsrftoken from "../data-types/x-csrf-token";

declare module "express-session" {
    interface SessionData {
        xcsrftoken: xcsrftoken
    }
}

tsconfig.json

{
    "compilerOptions": {
        "target": "ES2017",
        "module": "commonjs",
        "strict": true,
        "moduleResolution": "node",
        "resolveJsonModule": true,
        "esModuleInterop": true,
        "typeRoots": ["./src/types/express", "./src/types/express-session", "./node_modules/@types"]
    },
    "exclude": ["node_modules"]
}

但是下面的脚本返回Property 'xcsrftoken' does not exist on type 'Session & Partial<SessionData>'.

if (!req.session.xcsrftoken) {
    req.session.xcsrftoken = {};
}

我该如何解决这个问题?

hyrbngr7

hyrbngr71#

我解决了这个问题。你基本上必须创建一个主文件夹,每个包的文件夹和每个包文件夹的index.d.ts文件。然后你想把你的代码扩展包类型的index.d.ts文件。
例如:

types
    /libs
        /express
            /index.d.ts
        /express-session
            /index.d.ts

然后像这样将libs文件夹添加到typeRoot

typeRoots: ["types/libs", "node_modules/@types"]

相关问题