ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

ts-jest 的 tsconfig 选项完全指南:三种配置形态与底层解析原理

ts-jest 的 tsconfig 选项完全指南:三种配置形态与底层解析原理 测试开发工具【免费下载链接】ts-jestA Jest transformer with source map support that lets you use Jest to test projects written in TypeScript.项目地址https://gitcode.com/gh_mirrors/ts/ts-jest点击查看免费下载tsconfig是 ts-jest 中决定用哪份 TypeScript 编译配置来转换测试代码的核心选项它既可以是tsconfig.json文件的路径也可以是一段直接内联在 Jest 配置里的compilerOptions对象还可以显式设为false完全跳过自动查找。本指南以 ts-jest 仓库中 version-29.4 版本文档 为主线结合源码实现说明每种写法的解析过程、默认行为与底层合并规则帮助你精确控制测试环境下的 TypeScript 编译行为。选项概述tsconfig的三种取值形态tsconfig选项允许你定义 ts-jest 应该使用哪一个tsconfigJSON 文件也可以不使用文件路径而是直接指定一个内联的 compiler options 对象。从类型定义上看该选项的完整取值范围是tsconfig?: boolean | string | RawCompilerOptions | TsConfigCompilerOptionsJson这一定义位于仓库的 src/types.ts展开后对应三种实际用法取值形态含义典型场景string文件路径指向一个tsconfig.json文件测试代码使用独立的tsconfig.test.jsonobject内联 compiler options与tsconfig.json中compilerOptions相同结构的对象只想覆盖个别编译选项不想新建文件false布尔值禁用自动查找强制使用 TypeScript 默认编译选项项目根目录存在tsconfig.json但测试不希望被它约束默认情况下ts-jest 会尝试在你的项目中查找tsconfig.json。如果找不到它会使用 TypeScript 的默认 compiler options唯一的例外是target默认使用ES2015而不是 TypeScript 默认的ES5ES3。如果你希望即便项目里存在tsconfig.json也强制使用上述默认值把该选项设置为false即可。用法一指定tsconfig文件路径路径应当相对于你启动 Jest 时的当前工作目录cwd来书写也可以在路径中使用rootDir占位符从项目根目录出发定位文件import type { Config } from jest const jestConfig: JestConfigWithTsJest { // [...] transform: { // ^.\\.[tj]sx?$ to process ts,js,tsx,jsx with ts-jest // ^.\\.m?[tj]sx?$ to process ts,js,tsx,jsx,mts,mjs,mtsx,mjsx with ts-jest ^.\\.tsx?$: [ ts-jest, { tsconfig: tsconfig.test.json, }, ], }, } export default jestConfig在底层ts-jest 会把这个字符串交给ConfigSet.resolvePath处理见 src/legacy/config/config-set.ts其解析规则为以rootDir开头的路径会替换为 Jest 的rootDir即rootDir后的 9 个字符被拼接进根目录例如rootDir/tsconfig.test.json其他相对路径基于this.cwd启动 Jest 的目录解析为绝对路径若解析后文件不存在默认抛出FileNotFound错误。实践中最常见的做法是在项目根目录放一个专门的tsconfig.test.json通常继承基础配置并开启isolatedModules等测试友好选项再用rootDir或相对路径引用它。用法二内联 compiler options除了文件路径你还可以把 TypeScript 的compilerOptions对象直接内联到 ts-jest 的转换器选项中其结构与你平时写在tsconfig.json的compilerOptions字段基本一致import type { Config } from jest const jestConfig: Config { // [...] transform: { // ^.\\.[tj]sx?$ to process ts,js,tsx,jsx with ts-jest // ^.\\.m?[tj]sx?$ to process ts,js,tsx,jsx,mts,mjs,mtsx,mjsx with ts-jest ^.\\.tsx?$: [ ts-jest, { tsconfig: { importHelpers: true, }, }, ], }, } export default jestConfig这里内联对象所对应的类型就是仓库中的RawCompilerOptions定义于 src/raw-compiler-options.ts它逐条覆盖了 TypeScript 官方支持的全部编译选项如allowArbitraryExtensions、composite、declaration、exactOptionalPropertyTypes、isolatedModules、moduleResolution等因此你可以把它当作一份可编程的 tsconfig来使用。需要特别注意的是内联对象与磁盘上tsconfig.json的合并关系。查看_resolveTsConfig的实现src/legacy/config/config-set.ts当tsconfig为对象时ts-jest 仍会先尝试通过ts.findConfigFile找到项目里的tsconfig.json若有读取并解析它包括处理extends继承随后执行config.compilerOptions { ...config.compilerOptions, ...compilerOptions }即内联对象覆盖文件中的同名选项最终通过ts.parseJsonConfigFileContent合并、解析为完整的编译配置。换言之内联对象不是替代而是叠加它会保留tsconfig.json中未提及的其余选项只覆盖你显式给出的字段。若想让内联配置完全独立、不继承任何文件请配合false之外的场景评估或者直接使用文件路径方案。用法三禁用自动查找false默认情况下 ts-jest 会在项目中查找tsconfig.json但你可能完全不想用它而是希望保持 TypeScript 默认选项。将tsconfig设为false即可import type { Config } from jest const jestConfig: Config { // [...] transform: { // ^.\\.[tj]sx?$ to process ts,js,tsx,jsx with ts-jest // ^.\\.m?[tj]sx?$ to process ts,js,tsx,jsx,mts,mjs,mtsx,mjsx with ts-jest ^.\\.tsx?$: [ ts-jest, { tsconfig: false, }, ], }, } export default jestConfig从源码看src/legacy/config/config-set.tstsconfig: false时既不会解析文件路径因为不是字符串也不会传入内联对象因为不是对象于是_getAndResolveTsConfig会以空的 compiler options 起步直接进入 ts-jest 的默认值校正阶段。仓库测试 src/legacy/config/config-set.spec.ts 等用例正是用tsconfig: false来验证不读取任何 tsconfig 文件这一分支行为。底层原理解析流程与 ts-jest 强制默认值无论使用上面哪种写法最终都会汇聚到_getAndResolveTsConfigsrc/legacy/config/config-set.ts该函数在解析出原始配置后还会执行一系列 ts-jest 的默认值校正这是理解测试环境编译行为的关键target兜底为ES2015如果解析后的配置未指定target则强制设为ES2015源码注释明确说明这是为了替代 TypeScript 默认的ES3这是本选项文档开头所述找不到 tsconfig 时用 ES2015 而非 ES5的源码依据module默认值推导当target为ES3/ES5时默认module: CommonJS否则默认ESNext最终未指定module时统一兜底为CommonJS以保证 Jest 的 CommonJS 运行时环境能够加载产物ESM 互操作警告当未使用 Babel、module又不是CommonJS/Node16/NodeNext且未开启esModuleInterop或allowSyntheticDefaultImports时会产生一条ConfigNoModuleInterop诊断提示allowJs与outDir若开启allowJs: true却没有outDirts-jest 会自动指定一个内部输出目录sourceMap默认开启解析结果中sourceMap默认设为true并同步开启inlineSources支撑 ts-jest 的源码映射能力诊断上抛解析tsconfig过程中产生的错误如文件读取失败、配置语法错误会进入raiseDiagnostics遵循 diagnostics 选项 的ignoreCodes、throws等规则决定是抛出还是警告。实战建议与常见问题测试专用配置优先用文件路径生产构建的tsconfig.json往往开启了outDir、declaration、composite等对测试无意义的选项建议像仓库 e2e 示例如 e2e/transformer-options/tsconfig-cjs.spec.json那样维护独立的tsconfig.*.spec.json并通过tsconfig: tsconfig.test.json或rootDir显式指定。内联对象适合小范围覆盖只改一两个选项如importHelpers、module时内联对象最简洁但要记住它会与已发现的tsconfig.json做浅合并同名选项以内联值为准。false的取舍它让测试完全脱离项目 tsconfig 约束适合快速跑通、后续再收敛配置的场景但此时paths等路径映射见 paths-mapping.md也不会生效需配合moduleNameMapper处理。验证生效配置ts-jest 在调试日志中会输出normalized typescript config via ts-jest option见 src/legacy/config/config-set.ts可用DEBUGts-jest*环境变量运行 Jest检查最终生效的编译选项是否符合预期。赞分享测试开发工具【免费下载链接】ts-jestA Jest transformer with source map support that lets you use Jest to test projects written in TypeScript.项目地址https://gitcode.com/gh_mirrors/ts/ts-jest点击查看免费下载相关推荐radix-vue 中的 AlertDialogRootAlert Dialog 根组件的 Props、事件与插槽完整指南radix vue 中的 AlertDialogRootAlert Dialog 根组件的 Props、事件与插槽完整指南 导读 AlertDialogRoo测试开发工具Tolaria v2026-06-26 版本技术解读编辑器章节折叠与 Collection 呈现模型Tolaria v2026 06 26 版本技术解读编辑器章节折叠与 Collection 呈现模型 本篇以 Tolaria 的 v2026 06 26 发布测试开发工具ts-jest 的 ESM 支持完整指南Jest 运行时、tsconfig 与 Jest 配置三步走ts jest 的 ESM 支持完整指南Jest 运行时、tsconfig 与 Jest 配置三步走 本篇技术指南以 ts jest 在 Jest 中运行 E测试开发工具上一篇5分钟掌握IOPaint零基础也能上手的AI图像修复终极指南下一篇从原理到实践LFM2.5-ColBERT-350M的双向架构与Late Interaction技术详解创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表