isolatedModules模式下TS导出声明与导出列表差异原因问询
为什么
isolatedModules模式下两种导出接口的方式有区别? 当你开启isolatedModules时,TypeScript有个核心要求:必须明确区分「类型导出」和「值导出」——这个模式的设计目标是让每个文件都能被Babel这类只做转译、不做类型检查的工具正确处理,同时避免跨模块的类型解析歧义。
两种导出方式的本质差异:
直接
export interface Handler:
这种是原地定义并导出类型,TypeScript从语法上就能直接判定这是个类型声明,转译工具处理时会直接忽略这段类型代码,完全符合isolatedModules的要求,所以不会报错。先定义再
export { Handler }:
这种属于重新导出,此时TS没办法仅从export { Handler }这个语句判断Handler是类型还是值(比如变量、函数也能用这种语法导出)。而isolatedModules不允许这种模糊的导出——因为转译工具不识别类型,如果用普通导出语法导出类型,可能会生成无效的JS代码。所以TS要求你必须用export type { Handler }来明确标记这是类型导出,否则就会触发TS1205错误。
简单说,前者是明确的类型导出,后者是模糊的重新导出,isolatedModules要求所有类型相关的导出必须清晰标记,避免转译出错。
内容的提问来源于stack exchange,提问作者stackoverflower
相关产品推荐
相关产品推荐

