我无法在全局范围内扩展第三方库的接口,因为在根级别导入其他文件将导致声明文件不再是全局的。
这是一个例子:
我想在Express的Request对象上添加类型为“ MyUser”的属性“ user”。 如果它是MyUser类型,则可以执行以下操作:
declare namespace Express {
interface Request {
user: string;
}
}
,然后在其他地方:
...
function(..., req: Request, ...) {
...
req.user; //its a string
...
}
,一切都会正常运行。但是,执行以下操作无效:
import MyUser from "../../src/types/MyUser";
declare namespace Express {
interface Request {
user: MyUser;
}
}
因为我现在有一个顶级导入。有没有办法避免呢?如果您甚至不能在声明中使用自己的类型,那么能够合并声明又有什么意义呢?
答案 0 :(得分:1)
如果添加导入,则文件是模块,因此任何定义都是本地的(没有导入,该文件是旧脚本文件,并且其中的所有内容都是全局的)。
要将接口置于全局范围并使用导入,请使用declare global
import MyUser from "../../src/types/MyUser";
declare global {
namespace Express {
interface Request {
user: MyUser;
}
}
}