如何配置tsc不输出测试文件但仍执行类型检查?测试文件匹配**/*.test.ts
配置TypeScript编译器实现测试文件类型检查但不输出编译产物
要实现这个需求,有两种实用方案,可根据项目规模和工作流选择:
方案一:拆分编译与类型检查命令
适合小型项目,操作简单直接:
- 在项目根目录的
tsconfig.json中,将测试文件加入exclude列表,确保编译时跳过它们,不会生成对应的.js/.d.ts文件:
{ "compilerOptions": { // 你的其他编译配置,比如target、module、outDir等 }, "exclude": ["**/*.test.ts", "node_modules"] }
- 在
package.json的scripts里添加专门的类型检查命令,用--noEmit参数只做类型校验不输出文件,同时指定要检查的测试文件:
{ "scripts": { "build": "tsc", // 编译业务代码,不处理测试文件 "type-check:tests": "tsc --noEmit --include **/*.test.ts" // 仅检查测试文件类型 } }
执行npm run build只会输出业务代码的编译产物,执行npm run type-check:tests就能验证测试文件的类型正确性。
方案二:使用复合TypeScript配置
适合中大型项目,能统一管理配置:
- 根目录创建基础配置
tsconfig.json,包含所有需要类型检查的文件(包括测试文件),并开启noEmit只做类型校验:
{ "compilerOptions": { // 你的基础编译配置,比如target、module、strict等 "noEmit": true }, "include": ["src/**/*.ts"] // 假设所有代码(含测试)都在src目录下 }
- 新建
tsconfig.build.json,继承根配置,覆盖noEmit为false,同时排除测试文件,专门用来编译输出产物:
{ "extends": "./tsconfig.json", "compilerOptions": { "noEmit": false, "outDir": "./dist" // 指定编译产物输出目录 }, "exclude": ["**/*.test.ts"] }
- 在
package.json里配置对应脚本:
{ "scripts": { "type-check": "tsc", // 检查所有文件(含测试)的类型 "build": "tsc --project tsconfig.build.json" // 仅编译业务代码到dist目录 } }
执行npm run type-check会检查所有文件的类型,执行npm run build只会输出业务代码的产物,测试文件不会被编译输出。
两种方案都能满足需求:测试文件会被类型检查,但编译过程不会生成它们的输出文件。
内容的提问来源于stack exchange,提问作者Chiawen
相关产品推荐
相关产品推荐

