首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何扩展@type/express请求接口?

如何扩展@type/express请求接口?
EN

Stack Overflow用户
提问于 2018-06-28 15:27:32
回答 2查看 5.3K关注 0票数 6

虽然人们问过类似的问题,但这些答案都解决不了我的问题。我在TypeScript 2.9.2中,我试图向Express请求对象添加一个上下文对象。我想在一个.d.ts文件中这样做。

我目前拥有的是:express.d.ts

代码语言:javascript
复制
declare namespace Express {
    interface Request {
        context: any;
    }
}

但是,它不会编译,因为‘`Property’上下文‘在类型'Request’上不存在。

在我的其他文件中,Webstorm声称请求类型是从正确的文件中导入的。

我的印象是,我可以利用声明合并,而不必导入或导出类型定义。

这不对吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-29 07:21:02

只需做一个小小的修改就可以了:

代码语言:javascript
复制
declare namespace Express {
    export interface Request {
        context: any;
    }
}

当我们在名称空间中定义一个接口(或者,实际上,从常量到类)时,默认情况下,它只对同一个名称空间的成员可见,如手册中所述。通过添加export,我们让TypeScript知道外部代码必须使用这个接口,并且它将正确地合并到现有的声明中。

这不是真正的导出,因为它来自模块(在顶层),因为名称空间本身是declared,而不是exported。所以您只需像往常一样从模块导入它:

代码语言:javascript
复制
import * as express from 'express';
票数 8
EN

Stack Overflow用户

发布于 2021-02-17 18:35:12

使用当前版本的TypeScript,您不需要创建.d.ts文件。

代码语言:javascript
复制
import express from "express";

export type MyRequest = express.Request & {
  context?: any;
};

然后使用它来代替常规的请求对象:

代码语言:javascript
复制
app.use(function (req: MyRequest, res: Response, next: NextFunction) {
  req.context = {};
  next();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51086613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档