node.js - 声明合并不适用于 express 4.17.* 请求类型
问题描述
我想向 Request 类型添加一个属性,所以我创建了一个文件夹 @types/express 并在这个文件夹中添加了包含此内容的文件 index.d.ts。
namespace Express {
interface Request {
user: number;
}
}
在 VSCode 中,当我引用 时req.user
,错误已经消失,它甚至显示了屏幕截图user
类型number
,显示“请求”对象上的“用户”属性被正确处理
但是当我启动服务器时,我看到了这样的错误:
/home/myself/web/my-server/node_modules/ts-node/src/index.ts:434
return new TSError(diagnosticText, diagnosticCodes)
^
TSError: ⨯ Unable to compile TypeScript:
src/app.ts:46:7 - error TS2339: Property 'user' does not exist on type 'Request<ParamsDictionary, any, any, ParsedQs>'.
46 req.user;
~~~~
at createTSError (/home/myself/web/my-server/node_modules/ts-node/src/index.ts:434:12)
at reportTSError (/home/myself/web/my-server/node_modules/ts-node/src/index.ts:438:19)
at getOutput (/home/myself/web/my-server/node_modules/ts-node/src/index.ts:578:36)
at Object.compile (/home/myself/web/my-server/node_modules/ts-node/src/index.ts:775:32)
at Module.m._compile (/home/myself/web/my-server/node_modules/ts-node/src/index.ts:858:43)
at Module._extensions..js (internal/modules/cjs/loader.js:1220:10)
at Object.require.extensions.<computed> [as .ts] (/home/myself/web/my-server/node_modules/ts-node/src/index.ts:861:12)
at Module.load (internal/modules/cjs/loader.js:1049:32)
at Function.Module._load (internal/modules/cjs/loader.js:937:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:71:12)
我将不胜感激有关如何解决它的任何想法。
ps 我对express-session
模块做了同样的事情,并在界面中添加了一个counter
属性Session
,它完美地工作
解决方案
@types/express
安装后(也足够了@types/express-session
),这应该可以工作:
index.d.ts
:
declare module '@types/express-serve-static-core' {
interface Request {
user?: User
}
}
重要的部分是声明合并逻辑是其中的一部分@types/express-serve-static-core
(参见https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/express-serve-static-core/index.d.ts)。
推荐阅读
- css - Firefox 中光标下方的这个指示器是什么?
- laravel - 构建 JavaScript 时缺少模块
- python-3.x - 使用 Pyro4 使用 docker-compose 连接单独容器中的 python 脚本
- mongodb - 如果日期在 mongodb 中为 ISODate 格式,如何使用 $gte 和 <e mongo 运算符
- python - 在没有互联网访问的情况下安装 pythonnet
- html - 使用溢出内容时的弹性高度问题
- vb.net - 'Public Shared Sub Main()' 有多个具有相同签名的定义。”在 Visual Studio 中运行 Windows 服务时
- javascript - 我想通过另一个数组中的 id 过滤出一个对象数组
- curl - 如何使用 curl 命令登录 HashiCorp Vault
- jquery - 我想通过类名使用 jquery 或 javascript 更改 Div 顺序