typescript 类型“Request”上不存在属性“”< ParamsDictionary>

0tdrvxhp  于 2023-01-18  发布在  TypeScript
关注(0)|答案(5)|浏览(308)

当尝试从express包扩展Request接口以添加一些自定义属性时,我遇到以下打字错误:
TS2339: Property '' does not exist on type 'Request<ParamsDictionary>'.
你知道怎么解决吗?

nuypyhwy

nuypyhwy1#

自从最近更新了它的typings和依赖项之后,我发现下面的代码可以修复应用程序中的错误。
在您的tsconfig.json

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

在你的自定义输入中

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

vdgimpew2#

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

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

kr98yfug3#

我最近遇到了同样的问题,我按照前面的评论和repo中的解决方案,我仍然有同样的问题。经过进一步的挖掘,似乎这是ts-node的一个bug。
要解决这个问题,您需要使用--files标志运行服务器
因此,如果您通常运行服务器ts-node ./src/server.tsnodemon ./src/server.ts,请将其更改为ts-node --files ./src/server.tsnodemon --files ./src/server.ts
在那之后,我能够摆脱VScode错误和启动服务器时的错误。

h9a6wy2h

h9a6wy2h4#

在我的例子中,它缺少express的类型。我目前正在做的是将我们的代码库从Yarn迁移到PNPM。与PNPM的不同之处在于它不像Yarn那样提升依赖关系,所以我必须为每个使用该依赖关系的工作区添加对package.json的依赖关系。
这是我遇到的错误:

TSError: ⨯ Unable to compile TypeScript:
../server/src/api/filters/googleFilter.ts:6:23 - error TS2339: Property 'headers' does not exist on type 'Request<core.ParamsDictionary>'.

6   const idToken = req.headers.authorization;

当我决定打开该工作区的node_modules文件夹时,我花了相当多的搜索来寻找修复方法。

/// <reference types="express-serve-static-core" />
/// <reference types="serve-static" />

import * as bodyParser from "body-parser";
import serveStatic = require("serve-static");
import * as core from "express-serve-static-core";
import * as qs from "qs";

我看到我的IDE显示错误,告诉我它找不到express-serve-static-coreserve-static的类型,所以我所做的是将其添加到该工作区的package.json中,这样就修复了终端上的错误。
希望这能帮助其他人谁将遇到同样的问题与PNPM。

neekobn8

neekobn85#

"这对我很有效"

使用ts-node

按照@Rishav Sinha的建议,添加以下文件以将属性添加到快速请求接口
1.添加此文件src/types.custom.d.ts

declare global {
    declare namespace Express {
        interface Request {
            user?: any,
            page?: number,
        }
    }
}

// If this file has no import/export statements (i.e. is a script)
// convert it into a module by adding an empty export statement.
export { }

1.加入tsconfig.json

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

1.按照@Shahar Sharron的建议,使用--files选项运行此命令
如果全局安装了ts-node

$ ts-node --files ./src/index.ts

或从项目依赖项ts-node运行

$ npx ts-node --files ./src/index.ts

使用nodemon

如果要使用nodemom
1.将此文件添加到文件夹project nodemon.json

{
    "watch": ["src/**/*.ts"],
    "ext": "ts,json",
    "ignore": [
        "src/**/*.spec.ts",
        "src/**/*.test.ts"
    ],
    "exec": "npx ts-node --files ./src/index.ts"
}

1.运行nodemon

$ nodemon

相关问题