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

2024-01-12

虽然人们问过类似的问题,但这些答案都没有解决我的问题。我使用的是 TypeScript 2.9.2,我正在尝试将上下文对象添加到 Express Request 对象中。我想在一个.d.ts file.

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

declare namespace Express {
    interface Request {
        context: any;
    }
}

但是,它不会编译,因为类型“Request”上不存在“属性”上下文“。

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

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

这是不正确的吗?


只需稍作修改即可使其工作:

declare namespace Express {
    export interface Request {
        context: any;
    }
}

当我们在命名空间内定义一个接口(或者实际上是从常量到类的任何东西)时,默认情况下它仅对同一命名空间的成员可见,如handbook https://www.typescriptlang.org/docs/handbook/namespaces.html。通过增加export我们让 TypeScript 知道这个接口必须被外部代码使用,并且它将被正确地合并到现有的声明中。

这不是真正的导出,因为它是从模块(在顶层)导出的,因为名称空间本身是declared, not export编辑。所以你只需像往常一样从模块导入它:

import * as express from 'express';
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何扩展@types/express请求接口? 的相关文章

随机推荐