当人们提出类似的问题时,这些答案都无法解决我的问题。我在TypeScript 2.9.2中,并且试图将上下文对象添加到Express Request对象中。我想在一个.d.ts文件中做。
我目前所拥有的是:
express.d.ts
declare namespace Express {
interface Request {
context: any;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,由于在“请求”类型上不存在“属性”上下文,因此不会编译。
在我的其他文件中,Webstorm声称从正确的文件中导入了请求类型。
我的印象是,我可以利用声明合并的优势,而不必导入或导出类型定义。
这不正确吗?
只需一个小的修改即可工作:
declare namespace Express {
export interface Request {
context: any;
}
}
Run Code Online (Sandbox Code Playgroud)
当我们在命名空间内定义一个接口(或者,实际上,从常量到类的任何东西)时,默认情况下它只对同一命名空间的成员可见,如手册中所述。通过添加export我们让 TypeScript 知道这个接口必须被外部代码使用,并且它会被正确地合并到现有的声明中。
这不是真正的导出,因为它将来自模块(在顶层),因为名称空间本身是declared,而不是exported。所以你只需像往常一样从模块导入它:
import * as express from 'express';
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1027 次 |
| 最近记录: |