如何在TypeScript ES模块中分别导出默认类型与默认值?
如何在TypeScript ES模块中分别导出默认类型与默认值?
嗨,我懂你现在的困扰——之前靠单独的.d.ts文件导出monaco-editor的命名空间类型能满足TS编译,但现在想在ES模块里同时搞定默认类型和默认值的导出,对吧?我之前也碰到过类似的场景,给你分享两种实用的解决方法:
方法一:分开JS实现文件与TS类型文件
如果你还是想保持monaco.js(处理实际逻辑)和monaco.d.ts(声明类型)的分离结构,可以这样调整:
- 在
monaco.js里正常导出你的默认值:// 这里写你的实际逻辑,比如初始化monaco或者封装相关功能 import * as monaco from 'monaco-editor'; export default monaco; - 在对应的
monaco.d.ts里,明确关联默认导出的类型:import * as monaco from 'monaco-editor'; // 声明默认导出的类型和monaco-editor的命名空间一致 declare const defaultExport: typeof monaco; export default defaultExport;
这样TS编译器就能准确识别默认导出的类型是monaco-editor的命名空间,同时运行时的默认值也能和类型对应上。
方法二:在同一个TS文件中整合类型与导出
如果想把类型声明和逻辑实现放在同一个.ts文件里(符合ES模块规范),操作更简单:
import * as monaco from 'monaco-editor'; // 这里可以添加你的自定义逻辑,比如配置monaco、封装工具方法等 const myMonaco = monaco; // 直接导出默认值,TS会自动推断其类型为monaco-editor的命名空间 export default myMonaco;
这种情况下,TS会自动关联默认导出值的类型,不需要额外写类型声明,编译后的JS也会生成符合ES模块规范的默认导出。
其实你之前的.d.ts写法能生效,本质是直接把monaco-editor的命名空间类型作为默认导出,让TS认可了类型匹配。现在换成ES模块后,只要保证类型声明和实际导出值的类型对齐,就能解决问题啦。
备注:内容来源于stack exchange,提问作者user30388889
相关产品推荐
相关产品推荐

