扩展@types/module-a类型时遇TypeScript导出赋值错误求助
解决TypeScript扩展类型时的"An export assignment cannot be used in a module with other exported elements"报错
这个问题我之前在项目里踩过坑,本质是export assignment(比如export = XXX)和其他导出元素不能在同一个模块里共存,而你在扩展module-a的类型时刚好触发了这个规则。下面给你两种针对性的解决方法:
情况1:原模块用export assignment导出类型
如果@types/module-a里的module-a.d.ts是用export =的方式导出核心类型(比如下面这种结构):
// @types/module-a/module-a.d.ts declare module 'module-a' { interface ModuleA { originalProperty: number; } export = ModuleA; }
那你在扩展的时候,绝对不能在扩展文件里添加任何顶层的export或export =语句,直接在模块声明内部扩展原有类型即可:
// src/module-a.augmented.d.ts declare module 'module-a' { // 直接给原ModuleA接口添加新属性 interface ModuleA { businessSpecificProperty: string; } }
TypeScript会自动合并同模块下的同名接口,这样就不会触发报错,同时也完成了类型扩展。
情况2:原模块用ES模块规范导出
如果原模块是用ES模块的export语法导出的(比如export interface ModuleA { ... }),那你要确保扩展文件的结构和原模块一致,不要误用export =。正确的扩展方式是:
// src/module-a.augmented.d.ts declare module 'module-a' { export interface ModuleA { businessSpecificProperty: string; } }
额外注意事项
- 检查你的
tsconfig.json,确保include数组包含了src/**/*.d.ts,让TypeScript能识别到你的扩展文件; - 如果原模块导出的是类(
declare class ModuleA)或命名空间(declare namespace ModuleA),扩展逻辑和接口一致,直接在declare module 'module-a'内部添加属性或方法即可。
内容的提问来源于stack exchange,提问作者Picci
相关产品推荐
相关产品推荐

