qqi*_*ihq 3 module interface typescript
我有一个自定义的类型定义扩展现有接口(快递Request
如图所示这里)。内容express.d.ts
:
declare namespace Express {
export interface Request {
name: string
}
}
Run Code Online (Sandbox Code Playgroud)
工作正常。但现在name
我需要它成为一个自定义类,而不是一个字符串MyClass
。类定义如下所示:
export class MyClass {
first: string;
last: string;
}
Run Code Online (Sandbox Code Playgroud)
我将界面增强更改为:
import { MyClass } from "../routes/myClass";
declare namespace Express {
export interface Request {
name: MyClass
}
}
Run Code Online (Sandbox Code Playgroud)
现在访问时出现以下错误req.name
:
error TS2339: Property 'name' does not exist on type 'Request'.
Run Code Online (Sandbox Code Playgroud)
我发现,express.d.ts
由于添加了import
语句,我实际上变成了一个“模块” 。尽管如此,我还不清楚如何克服我的问题。
正如@unional 在评论中提到的那样,一旦您在文件中进行了顶级导入或导出,文件中的顶级范围就会成为模块范围,与全局范围分开。
要修改模块中的全局声明,您必须在全局命名空间中使用declare global
引用Express
:
import { MyClass } from "../routes/myClass";
declare global {
namespace Express {
export interface Request {
name: MyClass
}
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
671 次 |
最近记录: |