【问题标题】:Property '' does not exist on type 'Request<ParamsDictionary>'类型“请求<ParamsDictionary>”上不存在属性“”
【发布时间】:2020-03-16 08:11:11
【问题描述】:

当尝试从包 express 扩展 Request 接口以添加一些自定义属性时,我收到以下打字稿错误:

TS2339: Property '' does not exist on type 'Request&lt;ParamsDictionary&gt;'.

你知道怎么解决吗?

【问题讨论】:

    标签: javascript typescript express typescript-typings


    【解决方案1】:

    由于最近更新了其typings 和依赖项,我发现以下内容应该可以修复您的应用程序中的错误。

    在你的tsconfig.json

    {
      "compilerOptions": {
        //...
        "typeRoots": [
          "./custom_typings",
          "./node_modules/@types"
        ],
      }
    // ...
    }
    
    

    在您的自定义类型中

    // custom_typings/express/index.d.ts
    declare namespace Express {
        interface Request {
            customProperties: string[];
        }
    }
    

    【讨论】:

    • 是的,它确实修复了,但是当刚刚在根文件夹上创建 index.d.ts 文件时,我的 VScode 停止显示错误但我仍然在终端上收到错误,所以我按照你的描述做了,但直接创建了 index.d.ts custom_typings 中的文件,但它仍然给出错误,它是在创建 express 文件夹之后进行的,那么为什么 express 文件夹是强制性的?
    • 您可以创建一个名为 express 的目录,也可以创建一个名为 express.d.ts 的文件来告诉 typescript 您正在针对此特定模块
    • @RohitAmbre 你知道如何解决它吗? Vscode 似乎没有问题,但编译器显示一些错误。
    • @danie_man,我确实喜欢我在评论中解释的内容,它可以在没有任何编译器问题的情况下工作,您可以检查 here
    【解决方案2】:

    只需添加以下内容,它的作用就是向 express Request 接口添加一个自定义属性

    declare global {
      namespace Express {
        interface Request {
          propertyName: string; //or can be anythin
        }
      }
    }
    

    【讨论】:

    • 谢谢你,你能解释一下这是如何工作的吗?我从未见过有人使用声明全局
    【解决方案3】:

    我最近遇到了同样的问题,我按照之前的 cmets 和这个 repo 中的解决方案,我仍然遇到同样的问题。在进行更多挖掘之后,它似乎是ts-node 的一个错误。

    要解决这个问题,您需要使用 --files 标志运行您的服务器

    所以如果你正常运行你的服务器 ts-node ./src/server.tsnodemon ./src/server.ts 将其更改为 ts-node --files ./src/server.tsnodemon --files ./src/server.ts

    在那之后,我能够摆脱 VScode 错误和启动服务器时的错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-17
      • 1970-01-01
      • 2023-04-03
      • 2017-11-03
      • 1970-01-01
      • 2020-05-20
      • 2021-01-21
      • 2021-12-28
      相关资源
      最近更新 更多