快速会话 1.17.1+ ( req.session.myUserId )
Express Sessions 1.17.1+ ( req.session.myUserId )
我注意到 express-session 1.17.1+
中的变化,所以我不能只将自定义 属性(如 req.session.userId
)放入 req.session
。它会导致类型检查错误。
我尝试扩展 SessionData、Object.defineProperty
和许多其他选项,但由于某种原因,它不起作用。请帮忙!
我写了一个简单的代码来清楚地重现问题here
我也遇到了同样的问题。然后意识到最新版本(https://github.com/DefinitelyTyped/DefinitelyTyped/commit/d1259ee31e6b17c31a5a86e27a0d12f3ec7c5a19#diff-0d13c95494fa97febecd0fbc1fb1b8f6e17bbcaedb8c88d10a0b655046e1c97b)中的行为发生了变化。如下定义必填字段以使其工作。
declare module 'express-session' {
interface SessionData {
userId: string;
}
}
我 运行 遇到了这个完全相同的问题。
pull request 上有很多关于这个问题的讨论。 https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46576
综上所述,在您的express-session.d.ts
文件中,您需要像下面这样导入包并声明模块,以便声明合并生效。
import 'express-session';
declare module 'express-session' {
interface SessionData {
userId: number;
}
}
然后您希望在 tsconfig.json
文件中指定 typeRoots
,以便编译器选择您的自定义声明文件。
根据您的存储库,您的 typeRoots
看起来应该是:
"typeRoots": ["./src/@types", "./node_modules/@types"]
也许这对你有用,我分享给你以节省时间。
修改文件tsconfig.json
并添加
"typeRoots": [
"@types",
"./node_modules/@types"
]
创建包含以下内容的文件:@types/express/index.d.ts
import "express-session";
// what we are all looking to solve xD
// req.session.propertyX
declare module "express-session" {
interface SessionData {
propertyX: number;
}
}
// additional properties on other objects
// req.propertyY
declare global {
namespace Express {
interface Request {
propertyY: number;
}
}
}
希望它对你有用,并节省时间。
我注意到 express-session 1.17.1+
中的变化,所以我不能只将自定义 属性(如 req.session.userId
)放入 req.session
。它会导致类型检查错误。
我尝试扩展 SessionData、Object.defineProperty
和许多其他选项,但由于某种原因,它不起作用。请帮忙!
我写了一个简单的代码来清楚地重现问题here
我也遇到了同样的问题。然后意识到最新版本(https://github.com/DefinitelyTyped/DefinitelyTyped/commit/d1259ee31e6b17c31a5a86e27a0d12f3ec7c5a19#diff-0d13c95494fa97febecd0fbc1fb1b8f6e17bbcaedb8c88d10a0b655046e1c97b)中的行为发生了变化。如下定义必填字段以使其工作。
declare module 'express-session' {
interface SessionData {
userId: string;
}
}
我 运行 遇到了这个完全相同的问题。
pull request 上有很多关于这个问题的讨论。 https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46576
综上所述,在您的express-session.d.ts
文件中,您需要像下面这样导入包并声明模块,以便声明合并生效。
import 'express-session';
declare module 'express-session' {
interface SessionData {
userId: number;
}
}
然后您希望在 tsconfig.json
文件中指定 typeRoots
,以便编译器选择您的自定义声明文件。
根据您的存储库,您的 typeRoots
看起来应该是:
"typeRoots": ["./src/@types", "./node_modules/@types"]
也许这对你有用,我分享给你以节省时间。
修改文件tsconfig.json
并添加
"typeRoots": [
"@types",
"./node_modules/@types"
]
创建包含以下内容的文件:@types/express/index.d.ts
import "express-session";
// what we are all looking to solve xD
// req.session.propertyX
declare module "express-session" {
interface SessionData {
propertyX: number;
}
}
// additional properties on other objects
// req.propertyY
declare global {
namespace Express {
interface Request {
propertyY: number;
}
}
}
希望它对你有用,并节省时间。