扩展打字稿中的快速请求类型

Posted

技术标签:

【中文标题】扩展打字稿中的快速请求类型【英文标题】:extends express request type in typescript 【发布时间】:2020-03-24 15:21:20 【问题描述】:

重复: Extend Express Request object using Typescript

import  Router  from 'express';
import * as uuid from 'uuid';

我正在使用打字稿 3.6.4。我正在扩展 express.Request 类型,因为我想添加 id 字段:

interface request extends Express.Request 
    id: string

如果我使用设置 id 的中间件创建 post 方法:

router.post('/orders', (req: request, _res: express.Response, next) => req.id = uuid.v1(); next();, async function (req: request, res: express.Response) 
...
);

但我在 req: request 中遇到错误

tscongif.json


  "compilerOptions": 
    "target": "es6",
    "module": "commonjs",
    "lib": [
      "es5",
      "es6",
      "dom", 
      "es2017", 
      "esnext.asynciterable"
   ],
    "strict": true,
    "alwaysStrict": true,
    "noImplicitAny": true,
    "strictNullChecks": true,                 
    "strictFunctionTypes": true,              
    "strictPropertyInitialization": false,
    "noImplicitThis": true,
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "noImplicitReturns": true,
    "noFallthroughCasesInSwitch": true,
    "baseUrl": "./src",
    "esModuleInterop": true,
    "moduleResolution": "node",
    "allowSyntheticDefaultImports": true,

    "experimentalDecorators": true,
    "emitDecoratorMetadata": true,
    "forceConsistentCasingInFileNames": true,
    "sourceMap": true,
    "outDir": "./dist",
    "removeComments": true
  ,
  "exclude": ["node_modules"],
  "include": [
    "./src/**/*", "./src/**/*.tsx", "./src/**/*.ts"
  ]

【问题讨论】:

你遇到了什么错误? 【参考方案1】:

我想你在找declaration merging

您可以合并接口。 在 global.d.ts 中声明你的接口,ts 会合并它。

declare global 
  declare module 'express' 
    export interface Request 
      id: string;
    
  

而且你可以在应用程序的任何地方使用它

const id = Express.request.id;
const anythingElseFromRequestInterface = Express.request.baseUrl;

【讨论】:

【参考方案2】:

这个对我有用!

declare module "express" 
  interface Request 
    id: string
  

【讨论】:

以上是关于扩展打字稿中的快速请求类型的主要内容,如果未能解决你的问题,请参考以下文章

尝试使用 Ionic2 和打字稿中的 http 请求与通用提供程序进行 oauth2

打字稿中对象文字的类型安全合并

如何覆盖打字稿中的属性?

通用无状态组件 React 的类型?或在打字稿中扩展通用函数接口以具有进一步的通用性?

打字稿中的Angular js Http承诺

打字稿中的通用对象类型