本文介绍了如何覆盖外部打印脚本接口的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我在一个打字项目中使用passport。The DefinitelyTyped type definition for passport重写Express请求以包括user
属性。但它将用户定义为空界面:
index.d.ts
declare global {
namespace Express {
...
// tslint:disable-next-line:no-empty-interface
interface User {}
interface Request {
...
user?: User;
...
}
}
}
但是,在我的整个应用程序中,我希望req.user
成为此类型的接口:
interface User {
id: number
username: string,
profilePicture: string,
name: string
}
我厌倦了在整个应用程序中编写req.user as User | null
。我可以直接覆盖定义文件中的接口定义,但这似乎不适合在node_modules
中修改文件,如果我更新类型模块,该文件可能会被覆盖。
Express.User
的定义文件?我尝试将定义文件复制并修改到我的src目录,但它显示Augmentations for the global scope can only be directly nested in external modules or ambient module declarations
如果没有declare global
,TSC仍将req.user
视为空接口。
我必须在tsconfig.json
中包含什么配置才能选择此替代?
推荐答案
合并同一作用域中的接口声明。也就是说,以下
interface A {
name: string;
}
interface A {
id: number;
}
声明单个接口A
,有两个属性name
和id
。
因此,只需使用与Passport相同的技术来调整类型
// ensure file is parsed as a module
export {}
declare global {
namespace Express {
interface User {
id: number,
username: string,
profilePicture: string,
name: string
}
}
}
这篇关于如何覆盖外部打印脚本接口的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!