我无法在 express 的请求对象中声明新的 属性
i cannot declare new property in request object of express
我正在尝试将新的 属性 附加到打字稿中的请求对象。
这是代码:
import { request, Request, response, Response } from "express";
((req: Request, res: Response) => {
console.log(req.user);
})(request, response)
我是这样声明的:
declare global {
namespace Express {
interface Request {
user: string;
}
}
}
然后我 运行 使用 ts-node。结果是:
/home/mahdi/Desktop/learn-stuf/test/node_modules/ts-node/src/index.ts:843
return new TSError(diagnosticText, diagnosticCodes, diagnostics);
^
TSError: ⨯ Unable to compile TypeScript:
x.ts:9:21 - error TS2339: Property 'user' does not exist on type 'Request<ParamsDictionary, any, any, ParsedQs, Record<string, any>>'.
9 console.log(req.user);
~~~~
at createTSError (/home/mahdi/Desktop/learn-stuf/test/node_modules/ts-node/src/index.ts:843:12)
at reportTSError (/home/mahdi/Desktop/learn-stuf/test/node_modules/ts-node/src/index.ts:847:19)
at getOutput (/home/mahdi/Desktop/learn-stuf/test/node_modules/ts-node/src/index.ts:1057:36)
at Object.compile (/home/mahdi/Desktop/learn-stuf/test/node_modules/ts-node/src/index.ts:1411:41)
at Module.m._compile (/home/mahdi/Desktop/learn-stuf/test/node_modules/ts-node/src/index.ts:1596:30)
at Module._extensions..js (node:internal/modules/cjs/loader:1159:10)
at Object.require.extensions.<computed> [as .ts] (/home/mahdi/Desktop/learn-stuf/test/node_modules/ts-node/src/index.ts:1600:12)
at Module.load (node:internal/modules/cjs/loader:981:32)
at Function.Module._load (node:internal/modules/cjs/loader:827:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:77:12) {
diagnosticCodes: [ 2339 ]
}
我测试了太多网站的答案,但其中一个网站不起作用。请帮忙
您是否正在寻找 @types/express?
你也可以用intersection type修复它:
function endpoint (req: Request, res: Response & {user: string;}) {
console.log(req.user);
}
但也许您正在寻找 req.body.user
,请输入 Response<{user: string;}>
?
- 首先,我认为您的声明文件存在一些问题。
像
一样编辑文件
export {}
declare global {
namespace Express {
interface Request {
user: string;
}
}
}
或
namespace Express {
interface Request {
user?: string
}
}
- 在
tsconfig
中添加包含声明文件的目录。由于我通常将它命名为 express.d.ts
并放在 src/types
文件夹中,在我的例子中,tsconfig.json
将被编辑成这样
{
"compilerOptions": {
"typeRoots": ["src/types"],
}
}
- 最后,也在
tsconfig.json
中添加ts-node配置。 (不在 compilerOptions
)
{
"ts-node": {
"files": true
}
}
我正在尝试将新的 属性 附加到打字稿中的请求对象。 这是代码:
import { request, Request, response, Response } from "express";
((req: Request, res: Response) => {
console.log(req.user);
})(request, response)
我是这样声明的:
declare global {
namespace Express {
interface Request {
user: string;
}
}
}
然后我 运行 使用 ts-node。结果是:
/home/mahdi/Desktop/learn-stuf/test/node_modules/ts-node/src/index.ts:843
return new TSError(diagnosticText, diagnosticCodes, diagnostics);
^
TSError: ⨯ Unable to compile TypeScript:
x.ts:9:21 - error TS2339: Property 'user' does not exist on type 'Request<ParamsDictionary, any, any, ParsedQs, Record<string, any>>'.
9 console.log(req.user);
~~~~
at createTSError (/home/mahdi/Desktop/learn-stuf/test/node_modules/ts-node/src/index.ts:843:12)
at reportTSError (/home/mahdi/Desktop/learn-stuf/test/node_modules/ts-node/src/index.ts:847:19)
at getOutput (/home/mahdi/Desktop/learn-stuf/test/node_modules/ts-node/src/index.ts:1057:36)
at Object.compile (/home/mahdi/Desktop/learn-stuf/test/node_modules/ts-node/src/index.ts:1411:41)
at Module.m._compile (/home/mahdi/Desktop/learn-stuf/test/node_modules/ts-node/src/index.ts:1596:30)
at Module._extensions..js (node:internal/modules/cjs/loader:1159:10)
at Object.require.extensions.<computed> [as .ts] (/home/mahdi/Desktop/learn-stuf/test/node_modules/ts-node/src/index.ts:1600:12)
at Module.load (node:internal/modules/cjs/loader:981:32)
at Function.Module._load (node:internal/modules/cjs/loader:827:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:77:12) {
diagnosticCodes: [ 2339 ]
}
我测试了太多网站的答案,但其中一个网站不起作用。请帮忙
您是否正在寻找 @types/express?
你也可以用intersection type修复它:
function endpoint (req: Request, res: Response & {user: string;}) {
console.log(req.user);
}
但也许您正在寻找 req.body.user
,请输入 Response<{user: string;}>
?
- 首先,我认为您的声明文件存在一些问题。 像 一样编辑文件
export {}
declare global {
namespace Express {
interface Request {
user: string;
}
}
}
或
namespace Express {
interface Request {
user?: string
}
}
- 在
tsconfig
中添加包含声明文件的目录。由于我通常将它命名为express.d.ts
并放在src/types
文件夹中,在我的例子中,tsconfig.json
将被编辑成这样
{
"compilerOptions": {
"typeRoots": ["src/types"],
}
}
- 最后,也在
tsconfig.json
中添加ts-node配置。 (不在compilerOptions
)
{
"ts-node": {
"files": true
}
}