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 次 |
| 最近记录: |