扩展Express第三方接口:declare module中是否需用export interface?
Express接口扩展中export关键字的作用与规范
在你当前的.ts文件场景下,不需要给扩展的Request/Response接口加export关键字,加不加的区别主要体现在写法规范性和潜在风险上:
不加export的情况
这是TypeScript扩展第三方库类型的标准写法。当你在declare module "express-serve-static-core"内部直接声明接口时,TypeScript会自动将这个接口与原有模块中的同名接口进行合并,完美实现属性/方法的扩展,完全符合模块扩充(module augmentation)的设计规则。加export的情况
虽然TypeScript没报错,但这属于不规范的写法。此时你相当于在该模块内导出了一个新的同名接口,只是因为TypeScript允许同一模块内的同名接口自动合并,所以看起来也能生效。但这种写法依赖了接口合并的“副作用”,如果后续TypeScript的类型规则调整,或者你在其他地方尝试导入这个模块的接口时,可能会出现预期外的类型冲突或丢失扩展的问题。
另外要注意:如果是在.d.ts类型声明文件中写这段代码,规则会略有不同,但你用的是.ts文件,所以遵循上述结论即可。
内容的提问来源于stack exchange,提问作者athlonusm
相关产品推荐
相关产品推荐

