TypeScript能否对ES模块导出做静态类型检查以匹配指定interface?
TypeScript 目前没有原生支持直接声明 ES 模块整体导出需符合某接口的语法,但可以通过以下两种常用方案实现需求:
- 方案1:聚合导出内容后解构导出
适合新编写的模块,结构清晰,校验逻辑直观:
// file.ts interface Module { x: 4 y: string foo: () => number } // 先组装符合接口要求的导出对象 const moduleExports: Module = { x: 4, y: 'whatever', foo: () => 2 } // 解构导出所有内容 export const { x, y, foo } = moduleExports
如果导出内容不符合 Module 接口的定义,moduleExports 赋值时就会直接触发类型报错。
- 方案2:添加零侵入校验逻辑
适合已有模块,不需要改动原有的导出语句,仅需在模块末尾添加一行校验代码(需 TypeScript 4.9 及以上版本):
// file.ts 原有导出逻辑不变 export const x = 4 export const y = 'whatever' export const foo = () => 2 interface Module { x: 4 y: string foo: () => number } // 新增校验代码,导出不匹配时直接触发类型报错 type _ExportCheck = typeof import('./file') satisfies Module
两种方案都能在编译阶段完成静态检查,只要导出内容不匹配你定义的 Module 接口,就会提前抛出错误,完全满足类型校验的要求。
内容的提问来源于stack exchange,提问作者acfasj
相关产品推荐
相关产品推荐

