我有一个自定义的类型定义扩展现有接口(快递Request
如图所示这里)。内容express.d.ts
:
declare namespace Express {
export interface Request {
name: string
}
}
工作正常。但是name
我MyClass
现在不是一个字符串,而是需要它成为一个自定义类。类的定义如下:
export class MyClass {
first: string;
last: string;
}
我将接口扩充更改为:
import { MyClass } from "../routes/myClass";
declare namespace Express {
export interface Request {
name: MyClass
}
}
现在访问时出现以下错误req.name
:
error TS2339: Property 'name' does not exist on type 'Request'.
我发现,express.d.ts
由于添加了import
语句,我实际上成为了“模块” 。不过,我仍然不清楚如何解决我的问题。
如评论中的@unional所述,一旦在文件中进行了顶级导入或导出,文件中的顶级作用域便成为与全局作用域分开的模块作用域。
要修改模块中的全局声明,您必须使用在全局名称空间中declare global
进行引用Express
:
import { MyClass } from "../routes/myClass";
declare global {
namespace Express {
export interface Request {
name: MyClass
}
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句