扩展打字稿中的快速请求类型
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