如何使用@types/express-session?
How to use @types/express-session?
当我写这篇文章时:
import { Request } from 'express-serve-static-core';
router.post((req: Request, res, next) => {
req.session.user = user;
}
tsc
给我一个错误:
'Object is possibly 'undefined'.
我知道原始 Request
类型没有 session
字段。
我检查了 @types/express-session
index.d.ts
文件,发现了这个:
declare global {
namespace Express {
interface Request {
session?: Session;
sessionID?: string;
}
//....
}
所以我想向 req
添加额外的字段 session
和 sessionID
类型。
我该如何使用?像这样:req: Request & ExpressSessionRequest
.
因此 req
将同时具有原始 Request
类型和 @types/express-session
添加的额外字段类型。
问题不在于 Request
没有 session
或 sessionID
属性——express-session
的类型已经将属性添加到 Request
界面通过 declaration merging。
错误来自打开 strictNullChecks
编译器选项。由于属性 session
在类型定义中被声明为可为空,因此编译器会准确地警告您。如果您确定 req.session
不是 null 或 undefined,您可以使用 not-null assertion operator (!
) 来抑制错误:
router.post((req: Request, res, next) => {
req!.session!.user = user;
})
或显式检查 null|undefined:
router.post((req: Request, res, next) => {
if (req.session) {
req.session.user = user;
}
})
如果要使 session
和 sessionID
属性不可为 null,则可以编写自己的自定义类型:
type YourSessionRequest = Request & {
session: Express.Session;
sessionID: string;
}
router.post((req: YourSessionRequest, res, next) => {
req.session.user = user;
})
当我写这篇文章时:
import { Request } from 'express-serve-static-core';
router.post((req: Request, res, next) => {
req.session.user = user;
}
tsc
给我一个错误:
'Object is possibly 'undefined'.
我知道原始 Request
类型没有 session
字段。
我检查了 @types/express-session
index.d.ts
文件,发现了这个:
declare global {
namespace Express {
interface Request {
session?: Session;
sessionID?: string;
}
//....
}
所以我想向 req
添加额外的字段 session
和 sessionID
类型。
我该如何使用?像这样:req: Request & ExpressSessionRequest
.
因此 req
将同时具有原始 Request
类型和 @types/express-session
添加的额外字段类型。
问题不在于 Request
没有 session
或 sessionID
属性——express-session
的类型已经将属性添加到 Request
界面通过 declaration merging。
错误来自打开 strictNullChecks
编译器选项。由于属性 session
在类型定义中被声明为可为空,因此编译器会准确地警告您。如果您确定 req.session
不是 null 或 undefined,您可以使用 not-null assertion operator (!
) 来抑制错误:
router.post((req: Request, res, next) => {
req!.session!.user = user;
})
或显式检查 null|undefined:
router.post((req: Request, res, next) => {
if (req.session) {
req.session.user = user;
}
})
如果要使 session
和 sessionID
属性不可为 null,则可以编写自己的自定义类型:
type YourSessionRequest = Request & {
session: Express.Session;
sessionID: string;
}
router.post((req: YourSessionRequest, res, next) => {
req.session.user = user;
})