Typescript自定义类型定义在导入类上中断
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Typescript自定义类型定义在导入类上中断相关的知识,希望对你有一定的参考价值。
我有一个自定义类型定义来扩充现有的接口(Express Request
,如here所示)。 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
}
}
}
以上是关于Typescript自定义类型定义在导入类上中断的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 TypeScript 导入自定义 node.js 插件模块