Vitest对仅导出TypeScript类型、接口的文件无覆盖率问题排查
纯TypeScript类型文件覆盖率为0%的原因与解决办法
问题原因
- TypeScript的类型、接口属于编译时语法,编译成JavaScript时会被完全擦除,不会生成任何可执行代码。
- Vitest默认使用V8覆盖率工具,它仅追踪运行时实际执行的代码。纯类型文件编译后没有可执行内容,因此覆盖率显示为0%——哪怕这些类型在其他模块被引用,也不会改变这个结果。
解决方案
根据需求选择以下方式:
1. 排除纯类型文件,优化覆盖率统计
修改vitest.config.ts的coverage配置,添加exclude字段,把仅包含类型/接口的文件排除在外(可根据你的文件命名规则调整匹配路径):
import path from 'path' import vue from '@vitejs/plugin-vue' import { defineConfig } from 'vitest/config' export default defineConfig({ plugins: [vue()], test: { environment: 'jsdom', coverage: { all: true, include: ['Modules/Auth/**/*.ts'], // 排除纯类型文件,示例匹配*Response.ts、*Interface.ts后缀的文件 exclude: [ 'Modules/Auth/**/*Response.ts', 'Modules/Auth/**/*Interface.ts' ] } }, resolve: { alias: { '~': path.resolve(__dirname) } } })
2. 接受正常现象,明确覆盖率统计范围
如果不需要排除这些文件,需明确:覆盖率统计的是运行时业务代码的执行情况,类型定义不属于可执行逻辑,0%覆盖率是符合预期的结果,无需额外处理。
内容的提问来源于stack exchange,提问作者Antonio
相关产品推荐
相关产品推荐

