从 JavaScript 渐进迁移时 allowJs 与 checkJs 应如何分阶段启用
围绕“从 JavaScript 渐进迁移时 allowJs 与 checkJs 应如何分阶段启用”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖给出先编译混入、再逐步打开检查、最后转 .ts 的分阶段策略与风险点。
TypeScript面试题第 1 页,显示第 1–50 题,共找到 206 道完整解析,可继续按分类、标签与关键词缩小范围。
按稳定语义路径排序
围绕“从 JavaScript 渐进迁移时 allowJs 与 checkJs 应如何分阶段启用”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖给出先编译混入、再逐步打开检查、最后转 .ts 的分阶段策略与风险点。
用具名导出的无类型工具包解释环境模块声明,说明模块说明符、声明文件纳入、脚本与模块作用域,以及空声明变 any 的代价。
围绕“迁移中大量临时 any 应如何标记与收敛,避免永远留在代码里”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖给出用 unknown、@ts-expect-error 与 lint 规则追踪临时放宽的策略。
通过已有请求选项接口补充字段,解释外部模块语境、声明合并条件、运行时能力与升级冲突,避免把模块增强当成替换整个库类型。
围绕“tsc --build 与普通 tsc 在增量构建行为上有什么本质差异”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖区分按引用拓扑构建与单项目全量编译的行为与适用命令场景;不讲 watch 细节。
围绕“TypeScript 项目引用出现循环依赖时会怎样、应如何拆分”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖判断循环引用导致的构建失败表现,给出抽取公共底层项目的拆分原则。
围绕“为什么被引用的子项目必须开启 composite,它强制了哪些编译约束”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖解释 composite 对 rootDir、declaration 与文件包含的硬性要求及其原因。
用跨模块唯一符号示例复现 TS4023,解释公开类型的可表达性、显式公共接口和非导出辅助类型,避免用 any 或跳过检查掩盖发布问题。
解释 .d.ts.map 如何连接声明位置与 TypeScript 源码,区分 JavaScript 调试映射,并分析缺少源码、路径失效和编辑器支持导致的跳转问题。
以浏览器启动配置为例解释全局增强的文件作用域、可选字段、命名与生命周期,说明重复声明和跳过声明检查的风险。
围绕“第三方库自带类型与 @types 包冲突或版本错位时如何处理”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖判断 bundled types 与 @types 的优先级、版本对应关系与 resolutions 去重手段。
围绕“编辑器打开 monorepo 包时跳到 .d.ts 而不是源码,项目引用层面如何调整”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕用该选项控制跳转到声明输出还是源码的取舍及对大仓库性能的影响。
区分已有声明文件作为输入、实现文件生成声明和打包复制步骤,解释 declaration、emitDeclarationOnly、noEmit 与发布产物缺失的排查方法。
围绕“开启 emitDecoratorMetadata 与 experimentalDecorators 对依赖注入类库意”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明设计期类型元数据如何被发射到运行时代码及其对产物体积与反射依赖的影响;不讲装饰器提案新语法。
围绕“verbatimModuleSyntax 与导入省略(import elision)之间有什么关系”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖判断类型导入在编译期被擦除导致运行期副作用丢失的风险,及该选项如何让导入行为显式化。
围绕“incremental 生成的 .tsbuildinfo 文件应不应该提交到版本库”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕权衡跨机器缓存复用与缓存失效、冲突风险,给出 CI 与本地的不同处理建议。
围绕“isolatedModules 对代码写法施加了哪些约束、为什么转译工具需要它”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明单文件转译无法做类型感知改写,导致 const enum、re-export 类型等限制。
围绕“在纯 JavaScript 文件里用 JSDoc 注解获得类型检查的收益与边界是什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 JSDoc 与 @ts-check 能覆盖的常见类型表达及其相对 .ts 的能力上限;不逐条列 JSDoc 标签。
围绕“大型项目开启 strict 后报错过多,应如何拆分 strict 旗标渐进治理”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖选择按旗标或按目录分批修复的治理顺序,说明 strictNullChecks 通常最后开的原因;不讲各旗标细节。
围绕“TypeScript 的 moduleResolution 选项 node、node16、nodenext、bund”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要对比四种解析模式对扩展名、exports 字段与 ESM 的处理差异,给出选型判断;不逐条讲全部解析步骤。
围绕“在类型测试里断言 never 或 any 时为什么不能直接用相等比较”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 any 的双向兼容与 never 的条件类型短路会破坏朴素相等判断,需要交叉函数签名判等技巧。
围绕“noEmit 纯类型检查模式下,构建链路与 tsc 输出职责应如何划分”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖判断用 tsc 做门禁检查、交给打包器产物的分工与增量缓存影响;不对比具体打包器。
围绕“moduleResolution 设为 node16/nodenext 后为什么相对导入必须写 .js 扩展名”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖解释 Node ESM 规范要求完整说明符、且源文件中写 .js 对应编译输出的规则。
围绕“依赖包的 exports 字段如何改变 TypeScript 的类型解析结果”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 types 条件与 main 回退在解析中的优先级及旧版 node 模式的盲区。
围绕“tsconfig 里 paths 映射不生效时,与 baseUrl 及打包器的关系是什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 paths 只影响编译期解析、运行期仍需打包器或运行时同步配置的关键判断;不配置具体打包器。
围绕“TypeScript 项目引用(Project References)解决 monorepo 中的什么核心问题”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明拆分编译单元、按依赖拓扑增量构建的核心收益;不深入到具体构建编排细节。
围绕“配置项目引用后,为什么源码里的跨包 import 应指向包名而非相对路径到输出目录”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明引用如何让编辑器把依赖包解析到源码或声明输出,避免绕过增量构建。
围绕“如何用类型快照测试防止库导出的公共 API 类型被意外改动”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖给出对导出符号做类型断言快照并在 CI 中校验的方案边界。
围绕“resolveJsonModule 让 import JSON 可用,但会带来什么类型与产物上的变化”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖判断 JSON 被推导为字面结构类型、产物被复制进输出目录的连锁影响。
围绕“「找不到模块」诊断在 TypeScript 中出现时应按什么顺序排查解析配置”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖给出 module、moduleResolution、baseUrl、paths、文件扩展名的有序排查清单。
区分图片 URL、组件和 CSS Modules 映射的导出形状,解释通配声明、资源存在性、加载器配置与更精确的逐文件声明。
围绕“开启 skipLibCheck 能跳过什么、又会掩盖哪些真实问题”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕权衡编译速度收益与声明文件类型错误被吞掉的风险,给出库作者与使用方的不同建议;不讲整体编译提速。
围绕“strictNullChecks 上线前,如何用类型化边界逐步隔离不可空假设”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖给出用非空断言收敛、断言函数与边界类型标注的渐进方案;不讲 narrowing 语法全集。
围绕“tsconfig 的 target 与 lib 不一致时会引发什么类型与运行时的错位”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖区分语法降级与 API 类型可用性两个维度,给出按运行环境选 lib 的判断;不列出全部 lib 名称。
区分 reference path、types 和 lib 的编译依赖作用,解释文件位置、模块导入、运行时初始化以及声明发布后的路径维护。
围绕“@ts-expect-error 与 @ts-ignore 在迁移期的行为差异是什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖判断 expect-error 在错误消失时会主动报错、适合收敛临时豁免的关键差异。
围绕“发布类型库时为什么需要 tsd/dtslint 这类类型测试工具而不是普通单测”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖判断运行期单测无法覆盖类型回归的缺口,说明 expectError 类断言的价值。
围绕“如何用 expect-type 或 vitest 的 expectTypeOf 为类型层面写单元测试”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明类型断言在编译期求值、不产生运行时代码的测试机制与断言粒度;不对比所有类型测试库。
用单一 ESM 包说明 JavaScript 与类型入口的对应关系,解释 exports 条件、包内路径、typesVersions 的适用边界和独立消费验证。
围绕“tsconfig 中 typeRoots 与 types 两个选项分别控制什么、误配会导致什么现象”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖区分自动包含的目录扫描与按包名白名单包含的语义差异及典型漏配症状;不列举全部解析选项。
用 JavaScript 包的函数签名解释声明文件如何参与类型检查,说明声明与真实导出的对应关系、运行时缺失、版本匹配和自动生成的适用场景。
对比接口继承和交叉类型的兼容要求、冲突诊断时机与字段替换方式,展示 never 属性,并说明联合类型无法直接作为普通接口继承目标。
围绕“TypeScript 交叉类型如何合并多个对象类型?请处理冲突属性”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 a & b 合成所有属性,若冲突则取两者交叉(如 string & number 为 never)。
围绕“TypeScript 中 keyof 对可选属性与只读属性有何影响”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 keyof 对可选返回所有属性键(包括可选键),对 readonly 无影响,但索引访问会包括 undefined,避免过深。
围绕“TypeScript 中布尔字面量类型(true/false)有哪些实际应用?请举例”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕展示用于标志位的区分,如 isActive: true,可与联合组合,避免涉及常量枚举。
围绕“TypeScript 中 const 断言 (as const) 如何影响字面量类型推断?与枚举有何关联”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖解释 as const 将宽类型收窄为字面量,并可替代枚举部分场景,但不深入比较枚举差异。
围绕“TypeScript 中字面量类型可以通过 null 或 undefined 组合吗?请举例”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 'success' | 'error' | null 等可行,但 null 本身是字面量与其他类型组合,可能影响可空性。
围绕“TypeScript 是否支持数字或 bigint 字面量类型?如何生成枚举值联合”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕展示 1|2|3 或 3n 字面量,可结合 const 对象生成联合,避免与字符串字面量混淆。
对比 const 原始值、可变对象属性和数组的字面量推断,说明显式联合注解、as const 与 satisfies 的作用,以及只读类型不等于运行时冻结。
围绕“TypeScript 对象属性为字面量时为何会被拓宽?如何保持字面量类型”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明在变量与 const 外的对象属性若可变可拓宽,可用 as const 修饰,避免数组元素拓宽细节。