# 1. isolatedModules、verbatimModuleSyntax(TS 5.0+)对打包器(Babel/esbuild/SWC/Oxc)的协作 A isolatedModules 要求每个文件可独立转译(禁 const enum 等),verbatimModuleSyntax 强制保留 import type/export type 修饰符,保证与打包器语义一致 ✓ 正确答案 B esbuild 可以跨文件做类型分析 C verbatimModuleSyntax 会自动合并类型导入 D Babel 不需要 isolatedModules 配合
# 2. skipLibCheck 的开启代价(第三方类型 bug 隐藏)与治理 A skipLibCheck 会检查所有 .d.ts 文件 B skipLibCheck 跳过第三方 .d.ts 检查以提速,但会隐藏声明冲突与类型 bug,需用模块增强修正并锁定依赖版本治理 ✓ 正确答案 C skipLibCheck 与声明冲突无关 D 开启 skipLibCheck 后 tsc 不做任何检查
# 3. erasableSyntaxOnly(TS 5.8+)禁止 enum/namespace/参数属性的纯转译器兼容性 A erasableSyntaxOnly 允许使用 enum B erasableSyntaxOnly 只允许擦除后零运行时语义的语法,禁止 enum/namespace/参数属性等需生成代码的语法,保证纯转译器兼容 ✓ 正确答案 C 接口类型在 erasableSyntaxOnly 下被禁止 D 参数属性是纯类型语法
# 4. @ts-ignore/@ts-expect-error/@ts-nocheck 的滥用治理 A 三个指令语义完全相同 B @ts-ignore 在错误修复后会自动报错提醒 C @ts-nocheck 只抑制一行 D @ts-expect-error 在下一行无错误时会报"未使用"错误 ✓ 正确答案
# 5. lib 配置 在 IDE 智能提示与重构的工程价值 A lib 决定可用的标准库类型集合(ES/DOM/WebWorker 等),与 target 解耦,直接影响 IDE 补全与 API 可用性检查 ✓ 正确答案 B lib 与 target 必须一致 C lib 配置只影响产物大小 D DOM 类型不需要 lib 配置
# 6. @deprecated JSDoc 在库发布与消费的类型一致性 A @deprecated 只影响文档生成 B @deprecated 由 TS 识别并在 IDE/检查中提示废弃与替代方案,是库版本演进中"类型与迁移信息一致"的载体 ✓ 正确答案 C 废弃 API 应该直接删除类型 D IDE 无法显示废弃提示
# 7. TypeScript 模块解析策略(classic、node16、nodenext、bundler) A bundler 模式要求导入必须带扩展名 B node16/nodenext 按文件与 package.json 区分 ESM/CJS 并尊重 exports,bundler 模式模拟打包器解析(无扩展名、条件导出),按运行环境选型 ✓ 正确答案 C classic 模式是现代推荐解析策略 D node16 与 node10 解析规则相同
# 8. .d.ts 声明文件在第三方库类型扩展(declare module)的工程应用 A declare module 可为无类型库补声明,也可对已有模块做增量增强,配合 declare global 扩展全局类型 ✓ 正确答案 B declare module 只能声明新模块,不能增强已有模块 C 模块增强只能出现在脚本文件中 D declare module 支持运行时实现
# 9. tsconfig.json 的 strict 系列选项在大型项目的渐进启用策略 A strict 只包含 strictNullChecks B 开启 strict 后不再需要 lint C strictNullChecks 无法迁移到存量代码 D strict 是一族检查选项的聚合,大型项目应通过配置继承、目录分区与分批修复渐进启用 ✓ 正确答案
# 10. moduleResolution: bundler 在 Vite、Webpack 等打包器下的类型解析行为 A bundler 模式不支持无扩展名导入 B moduleResolution: bundler 模拟打包器解析(无扩展名、exports 条件),需与 resolve.alias/conditionNames 配置同步保证类型与运行时一致 ✓ 正确答案 C bundler 模式忽略 package.json exports D Vite 工程不应使用 bundler 模式
# 11. exports/imports 条件导出(含 import/require/types/browser) A exports 字段只有 import 一种条件 B exports 条件按声明顺序匹配,types 条件应前置保证类型优先 ✓ 正确答案 C 子路径不需要在 exports 中声明 D exports 与 main 同时使用时 main 优先
# 12. 类型声明合并(declaration merging)在全局扩展与库作者的应用 A 同名 interface 会互相覆盖 B namespace 与 class 无法合并 C 声明合并使同名 interface/namespace 自动合并,可用于全局类型扩展与库插件接口设计 ✓ 正确答案 D declare global 只能用于类型别名
# 13. 环境声明(ambient declarations) A 环境声明用 declare 描述运行时已存在的全局/模块内容(无类型包、CSS 导入、全局变量),只提供类型不产生实现 ✓ 正确答案 B ambient 声明会生成运行时代码 C declare module 不能用于 CSS 文件 D ambient 文件默认是模块
# 14. TypeScript 5.x 实验装饰器(@dec)与 Stage 3 标准装饰器的转译器差异 A legacy 装饰器与 Stage 3 装饰器可以混用 B legacy 装饰器是 (target, key, descriptor) 形态,Stage 3 装饰器是 (value, context) 形态且支持 Symbol.metadata,二者语义不同需按模式配置转译器 ✓ 正确答案 C Stage 3 装饰器需要 experimentalDecorators D 两套装饰器转译结果完全相同
# 15. ECMAScript 装饰器(Stage 3,access/context 二元形态) A Stage 3 装饰器接收 (target, key, descriptor) 三参数 B context 没有静态信息 C 字段无法被装饰 D Stage 3 装饰器是 (value, context) 形态,context 提供 kind/name/addInitializer/metadata 等能力,TS 5.0+ 原生支持 ✓ 正确答案
# 16. 装饰器在类、方法、访问器、字段的元数据应用 A 装饰器只能用于类 B 字段装饰器无法记录元数据 C 装饰器可在类/方法/访问器/字段上附加元数据并改写行为,是 DI、ORM、校验等框架的声明式元数据基础 ✓ 正确答案 D 装饰器在运行时求值顺序无关紧要
# 17. auto-accessor(随装饰器 Stage 3) A accessor 关键字需要手写 get/set B accessor 与装饰器无关 C auto-accessor 不支持私有字段 D accessor 自动生成后备字段与 get/set,装饰器应用于访问器而非字段,可通过 context.access 读写值 ✓ 正确答案
# 18. 装饰器在 Angular、Lit、Aurelia 的核心地位与设计哲学差异 A Angular 以装饰器为核心契约,Lit 用装饰器声明响应式属性,Aurelia 主张装饰器可选,三者的设计哲学不同 ✓ 正确答案 B 三个框架对装饰器的依赖程度相同 C Aurelia 强制使用装饰器 D Lit 不使用 TypeScript
# 19. Stage 3 装饰器元数据(context.metadata 与 Symbol.metadata)的工程应用 A 装饰器通过 context.metadata 写入类共享元数据,可用 Symbol.metadata 读取,是 DI/校验/ORM 等元数据驱动设计的标准通道 ✓ 正确答案 B context.metadata 在每个装饰器间相互独立 C Symbol.metadata 是运行时全局对象 D 元数据无法跨继承链合并
# 20. module: Node16/NodeNext 与 moduleResolution: bundler 在 ESM/CJS 互操作的工程取舍 A bundler 模式会检查 ESM/CJS 互操作限制 B nodenext 下 ESM 可以静态 import 任何 CJS 包 C node16/nodenext 严格模拟 Node 的 ESM/CJS 互操作规则,bundler 模式假设打包器统一处理互操作,按运行环境取舍配置 ✓ 正确答案 D bundler 模式可用于纯 Node 库发布
# 21. exactOptionalPropertyTypes 在 API 边界严格区分 T | undefined 与 T? 的语义差异 A 开启 exactOptionalPropertyTypes 后 T? 仍可显式赋 undefined B T? 与 T | undefined 在任何模式下都等价 C 该选项只影响接口继承 D exactOptionalPropertyTypes 使可选属性只接受"缺失",显式 undefined 需声明为 T | undefined,从而在 API 边界严格区分两种语义 ✓ 正确答案
# 22. 声明文件(.d.ts)与双格式包发布的消费者兼容 A 双格式包只需一份 .d.ts B 双格式包应按 ESM/CJS 分别分发 .d.mts/.d.cts 声明,exports 中 types 条件与 import/require 配对且前置,保证两类消费者类型一致 ✓ 正确答案 C node16 解析会忽略 .d.mts D types 条件应放在条件列表最后
# 23. TypeScript 项目引用(Project References) A 项目引用不需要 composite B Project References 通过 references + composite + tsc --build 按依赖图增量构建,适合 Monorepo 分层拆分与缓存 ✓ 正确答案 C tsc --build 会全量重编译所有项目 D 项目引用支持循环引用
# 24. tsconfig.json 的 target、module、moduleResolution、strict 核心配置影响 A target 决定模块解析规则 B target 决定语法转译级别、module/moduleResolution 决定模块语义、strict 决定检查严格度,三者按场景组合配置 ✓ 正确答案 C moduleResolution 与 module 无关 D strict 只包含 noImplicitAny
# 25. allowImportingTsExtensions(TS 5.0+)与 --rewriteRelativeImportExtensions 的边界 A allowImportingTsExtensions 要求 noEmit 或 emitDeclarationOnly,rewriteRelativeImportExtensions 在 emit 时把相对导入的 .ts 改写为 .js,适合原生 ESM 项目 ✓ 正确答案 B allowImportingTsExtensions 允许带 .ts 后缀导入且可同时 emit C rewrite 会改写裸包名导入 D 打包器项目必须开启 rewrite
# 26. useDefineForClassFields 与 target ES2022+ 在 class field 语义的协作 A target ES2022+ 时 useDefineForClassFields 默认使用 [[Set]] 赋值语义 B target ES2022+ 时 useDefineForClassFields 默认开启 [[Define]] 语义,影响继承 setter 触发与字段遮蔽,升级 target 需回归相关场景 ✓ 正确答案 C class field 语义与装饰器无关 D useDefineForClassFields 只影响枚举顺序
# 27. isolatedDeclarations(TS 5.5+)的显式返回类型约束与 .d.ts 生成加速 A isolatedDeclarations 允许隐式推断的导出函数 B isolatedDeclarations 会加快运行时执行 C isolatedDeclarations 要求导出函数显式标注返回类型以便逐文件独立生成 .d.ts,加速库与 Monorepo 的声明产出 ✓ 正确答案 D 该选项与声明生成无关
# 28. 命名空间(namespace)与 ES Module 在工程化代码组织的取舍 A namespace 支持 tree-shaking B ES Module 静态可分析、支持 tree-shaking 是现代代码组织标准,namespace 主要保留在声明文件与全局类型组织场景 ✓ 正确答案 C ES Module 无法处理循环依赖 D namespace 与 ES Module 完全等价
# 29. TypeScript 的 declare 与 ambient 上下文在大型 monorepo 的工程价值 A ambient 文件之间互不可见 B declare global 只能在 .d.ts 中 C monorepo 中集中组织 ambient 声明(全局类型、模块增强、资源声明)可统一全局类型面,减少各包重复声明与冲突 ✓ 正确答案 D 环境声明文件可以有 import/export
# 30. @ts-check 在 JSDoc 注释启用类型检查的渐进迁移策略 A @ts-check 只在 TS 文件生效 B @ts-check 在 JS 文件启用类型检查,配合 JSDoc 类型注释可实现"JS 加类型 → 逐步迁移 .ts"的渐进策略 ✓ 正确答案 C JSDoc 无法定义泛型 D checkJs 与 @ts-check 互斥
# 31. TypeScript 配置文件继承(extends)在多项目共享配置的工程实践 A extends 浅合并 compilerOptions,files/include 不继承,paths 按各自文件解析,多项目共享配置宜用 base + 覆盖模式 ✓ 正确答案 B extends 会继承子配置的 files 字段 C extends 深度合并所有字段 D 子配置无法覆盖父配置的 strict
# 32. emitDeclarationOnly 与 declaration 在类库发布的工程取舍 A 类库发布常用打包器产 JS + tsc --emitDeclarationOnly 产 .d.ts 的分工,需保证转译语义一致并单独做类型检查 ✓ 正确答案 B emitDeclarationOnly 会同时输出 JS 与声明 C emitDeclarationOnly 会执行类型检查 D declarationMap 无法用于类库
# 33. JSDoc @typedef 与 @template 在无 TypeScript 项目的轻量类型化 A @typedef 定义命名类型、@template 定义泛型,配合 @ts-check 可在纯 JS 项目获得类型检查与补全,但能力弱于 .ts ✓ 正确答案 B @template 可以定义运行时泛型 C JSDoc 类型化与 IDE 补全无关 D @typedef 只能定义基本类型
# 34. import type 与 export type 在构建产物与 tree-shaking 的工程取舍 A import type 会触发模块执行副作用 B import type/export type 声明纯类型导入,擦除后零产物,配合 verbatimModuleSyntax 显式化可提升摇树精度与可读性 ✓ 正确答案 C 类型导入与摇树无关 D import type 只能用于 .d.ts
# 35. Monorepo 中共享类型包(types package) A 类型包应该包含运行时实现 B Monorepo 共享类型包按域拆分导出、用声明构建快速产出,配合项目引用消费,并需管控 API 演进与版本 ✓ 正确答案 C 类型包无法被项目引用消费 D 类型包不需要版本管理
# 36. TypeScript package.json 的 exports 字段在子路径导出的类型解析 A exports 未声明的子路径仍可被类型解析 B exports 不影响子路径的类型解析 C exports 子路径通过键与通配符声明,每个入口需配对 types 条件且置于条件首位,未声明路径类型与运行时都不可解析 ✓ 正确答案 D 通配符子路径不需要 types 条件
# 37. tsc --build 与 Project References 增量构建在大型代码库的应用 A tsc --build 基于项目引用依赖图增量重建,利用 .tsbuildinfo 缓存,CI 与本地统一命令并定期 --force 校验缓存 ✓ 正确答案 B tsc --build 总是全量重建 C 项目引用不支持 --watch D 增量缓存永远不会失效
# 38. ts-node、tsx 与 SWC 在 Node.js 运行时类型执行的工程取舍 A ts-node 默认会做类型检查 B SWC 转译语义与 tsc 完全一致 C tsx 支持类型检查 D ts-node/tsx/SWC 是开发期 TS 执行方案,tsx 基于 esbuild 启动快,生产应编译为 JS,CI 用 tsc --noEmit 独立把关类型 ✓ 正确答案
# 39. 声明文件生成(dts-bundle-generator、rollup-plugin-dts)在类库发布的取舍 A dts-bundle-generator/rollup-plugin-dts 把声明打包为单文件,可内联/外置类型,发布后需用类型测试校验声明失真 ✓ 正确答案 B rollup-plugin-dts 会执行类型检查 C tsc 原生声明不支持子路径 D 声明打包与双格式发布无关
# 40. verbatimModuleSyntax(TS 5.0+)与 importsNotUsedAsValues 在强制 type 导入与打包器 tree-shaking 的现代取舍 A verbatimModuleSyntax 取代 importsNotUsedAsValues,强制类型导入显式 type 化并原样输出,配合 isolatedModules 提升摇树精度与转译器一致性 ✓ 正确答案 B importsNotUsedAsValues 是 TS 5.0 新特性 C verbatimModuleSyntax 会自动删除类型导入 D 该选项只影响 .d.ts 生成
# 41. .d.ts 与 .d.mts/.d.cts 在 ESM-only/CJS-only 包的声明分发的现代工程实践 A ESM 包可以用 .d.cts 声明 B .d.mts 与 .d.ts 完全等价 C 声明格式需与产物模块格式匹配(ESM 用 .d.mts、CJS 用 .d.cts),单格式包保持单一声明,双格式包才需双声明分发 ✓ 正确答案 D 声明格式不影响互操作类型
# 42. paths 与 baseUrl 在 TS 路径别名与 Vite/Rspack resolve.alias 的协作关系 A paths 别名会自动改写产物路径 B tsconfig paths 管类型解析、打包器 resolve.alias 管运行时替换,二者需保持一致,可用 vite-tsconfig-paths 等单一来源维护 ✓ 正确答案 C Vite 无法读取 tsconfig paths D paths 与 baseUrl 无关
# 43. Reflect Metadata 在依赖注入与 ORM 映射的应用 A emitDecoratorMetadata 生成运行时类型检查代码 B Reflect Metadata + emitDecoratorMetadata 记录设计时类型元数据,DI 容器读取 paramtypes 注入、ORM 读取属性元数据映射,现代方案转向 Symbol.metadata ✓ 正确答案 C Reflect Metadata 与装饰器无关 D ORM 不需要元数据即可映射
# 44. 装饰器在 Nest.js、TypeORM、tsoa 等框架的元数据驱动设计 A tsoa 在运行时读取装饰器元数据 B Nest.js 运行时用元数据构建 DI/路由、TypeORM 读取实体元数据映射、tsoa 构建期生成 OpenAPI,装饰器元数据驱动方式各有不同 ✓ 正确答案 C 三个框架都使用代码生成 D 装饰器与框架无关
# 45. TypeScript Roadmap(持续演进) A TypeScript 每年只发布一个大版本 B 新特性无需评估即可引入 C tsgo 已经正式取代 tsc D TypeScript 约 3 个月一个 minor,方向由 GitHub/迭代计划驱动,近期聚焦 tsgo 原生编译器与装饰器,升级前应评估 breaking changes 并用 CI 灰度 ✓ 正确答案
# 46. TS 5.5/5.7/5.8 的新特性(--rewriteRelativeImportExtensions、--noUncheckedSideEffectImports、条件分支收窄、类型谓词推断)对工程体验的改善 A 类型谓词推断让 filter 后的数组元素自动收窄 B TS 5.5-5.8 的新特性分别改善推断(谓词/分支收窄)、模块处理(rewrite 扩展名、副作用导入检查)与构建约束(erasableSyntaxOnly) ✓ 正确答案 C noUncheckedSideEffectImports 用于检查类型导入 D rewriteRelativeImportExtensions 在运行时改写路径
# 47. using/await using 声明(TS 5.2+ / Stage 3 提案 Explicit Resource Management) A using 只是 try/finally 的语法糖,不调用任何协议 B using 声明在作用域结束时自动调用资源的 Symbol.dispose 方法 ✓ 正确答案 C await using 用于同步释放 D 资源管理只能手动 release
# 48. TypeScript 项目使用 native decorators 与 useDefineForClassFields 的取舍 A Stage 3 装饰器与 useDefineForClassFields: true 的 define 语义天然对齐,新项目应统一 ES2022+ 配置,避免混用 legacy 装饰器 ✓ 正确答案 B native decorators 与 useDefineForClassFields 无关 C legacy 装饰器与 native 装饰器可以混用 D accessor 关键字与装饰器冲突
# 49. TC39 装饰器提案时间线与 Babel/SWC 转换兼容性 A 装饰器提案已经 Stage 4 定稿 B Babel 所有版本装饰器语义相同 C 装饰器提案从旧 descriptor 形态演进为 Stage 3 的 (value, context) 形态,Babel/SWC 按 legacy/2023-05/2023-11 版本选择语义,必须与源码语义对齐 ✓ 正确答案 D SWC 不支持装饰器
# 50. 装饰器与 Class Field 的执行顺序(类 > 字段 > 方法) A 类装饰器最先执行 B 装饰器执行顺序与声明顺序无关 C 成员装饰器先于类装饰器执行(类可能被替换),字段初始化发生在实例化期,理解时序是元数据框架调试的关键 ✓ 正确答案 D addInitializer 在装饰器执行前调用
# 51. 升级 TypeScript 大版本前用 --explainFiles 与 CI 类型差异评估破坏性变化 A 升级不需要基线对比 B 升级前用 --explainFiles 核对文件集合、CI 双版本矩阵对比错误面,并按 breaking changes 分类渐进修复 C --explainFiles 用于解释每个文件被包含与解析的原因 ✓ 正确答案 D --explainFiles 会修改 tsconfig
# 52. TypeScript 5.0+ 装饰器 在类型测试(tsd、expectTypeOf) A 装饰器不影响类型的测试 B 装饰器改写类型后,需用 tsd/expectTypeOf 对装饰后签名、工厂泛型与元数据做断言,并与运行时测试双覆盖 ✓ 正确答案 C tsd 无法测试装饰器 D @ts-expect-error 不能用于装饰器场景
# 53. TS 的 module: "preserve"(5.4+)在原样输出 import 语句与 Bundler 解析的工程价值 A module: preserve 会把 import 转成 require B module: preserve 原样输出 import/export,配合 moduleResolution: bundler 把模块转换完全交给打包器,适合打包器工程 ✓ 正确答案 C preserve 与 bundler 解析冲突 D preserve 适合 Node 直接运行场景
# 54. declaration: true 与 declarationMap(source map for d.ts)在 IDE 跳转与库用户体验的现代取舍 A map 文件不影响发布物 B declarationMap 提供声明到源码的映射,改善消费端调试体验,但增加包体积且闭源场景需权衡 C declaration 不需要 declarationMap 即可跳转源码 D declarationMap 让 IDE 从声明跳转到源码 ✓ 正确答案
# 55. globalAugmentations 与 declare global 在扩展第三方库类型(如 Express、Vue)的边界 A declare global 只能在脚本文件中使用 B window 扩展只能用 declare module C 库用 type 定义时也可以被自动合并 D declare global 在模块文件中扩展全局(如 Express.Request),第三方库的类接口用模块增强扩展,均依赖接口合并机制且需纳入类型入口 ✓ 正确答案
# 56. TS 5.x 的 noUncheckedSideEffectImports(5.6+)在 CSS、SVG 等副作用导入的检测能力 A 该选项忽略所有副作用导入 B noUncheckedSideEffectImports 检查无绑定副作用导入的路径与声明 ✓ 正确答案 C 开启后 CSS 导入必然报错 D 副作用导入不需要任何类型声明
# 57. tsconfig.json 的 include/exclude/files 三者优先级与大型 Monorepo 的工程实践 A exclude 可以排除 files 中显式列出的文件 B 未配置 include 时不包含任何文件 C include 的 glob 相对项目根目录 D 生效文件集合 = (files ∪ include) - exclude,exclude 只作用于 include 结果,Monorepo 应限定 include 范围并用 references 组织 ✓ 正确答案
# 58. allowImportingTsExtensions(TS 5.0+)在搭配 bundler 时的 "noEmit": true 工程边界 A allowImportingTsExtensions 可以搭配 tsc emit 使用 B 打包器无法解析 .ts 后缀 C allowImportingTsExtensions 要求 noEmit 或 emitDeclarationOnly,源码级 .ts 后缀导入由打包器解析,需要 tsc 产物时应改用 rewrite 方案 ✓ 正确答案 D 该选项与声明生成无关
# 59. package.json 的 types/typings/exports.types 字段在类型入口分发与 ESLint 解析的工程价值 A exports.types 的优先级低于 types 字段 B ESLint 不依赖类型入口 C types 字段只影响 IDE 补全 D exports.types 条件按分支分发类型入口,优先级高于 types,缺失时 TS 回退且 ESLint 类型感知规则失效,发布前应校验 ✓ 正确答案