类型基础与工具类型

共 71 题
#

1. exactOptionalPropertyTypes 在库发布与消费的类型一致性

A 开启 exactOptionalPropertyTypes 后,可选属性可以显式赋值为 undefined
B 开启 exactOptionalPropertyTypes 后所有对象属性都必须提供
C exactOptionalPropertyTypes 只影响运行时行为,不影响类型检查
D 开启 exactOptionalPropertyTypes 后,`prop?: T` 不再允许显式赋值为 undefined,从而严格区分"缺失"与"显式 undefined" ✓ 正确答案
#

2. DeepReadonly/DeepPartial 在外部 API 接入的类型边界

A Readonly<T> 会递归冻结嵌套对象的所有层级
B Deep 系列工具类型对函数类型会自动展开其参数结构
C DeepPartial<T> 会把所有属性变为必填
D DeepReadonly<T> 递归地把所有嵌套层级的属性变为只读,适合外部 API 响应数据的不可变建模 ✓ 正确答案
#

3. enum、const enum 与 as const 对象的取舍,运行时存在性、tree-shaking 与类型推导的工程差异

A const enum 会生成运行时对象,便于反向映射
B 普通 enum 在 Babel 转译下完全无兼容问题
C as const 对象配合 typeof 提取类型,兼具字面量推导与可 tree-shaking 的运行时对象,是常被推荐的替代方案 ✓ 正确答案
D as const 只能用于数组,不能用于对象
#

4. 协变(covariance)、逆变(contravariance)与 strictFunctionTypes 在函数类型兼容性中的工程影响

A 函数参数是协变的,返回值是逆变的
B strictFunctionTypes 对方法声明也强制执行逆变
C strictFunctionTypes 开启后仅对函数类型(非方法声明)的参数启用严格逆变检查 ✓ 正确答案
D 协变与逆变只影响接口继承,不影响函数赋值
#

5. Template Literal Types(${Uppercase<T>} ${Uncapitalize<T>} 等)

A 模板字面量类型通过 ${T} 插值在推断时进行字符串模式匹配,可与 Uppercase 等内置操作类型组合生成新字符串字面量类型 ✓ 正确答案
B 模板字面量类型只能用于字符串的运行时校验
C Uppercase<T> 只能作用于字面量类型,不能作用于模板字面量
D 模板字面量类型无法推导出字符串的一部分
#

6. infer 在解构函数参数、Promise resolve 类型、数组元素的深度应用

A infer 可以在条件类型之外独立声明类型变量
B infer 只能提取 Promise 的 resolve 类型
C infer 在条件类型的 extends 分支中声明待推断变量,通过结构匹配回填,用于提取函数参数、返回值与数组元素等类型 ✓ 正确答案
D infer 声明的变量在条件类型为假分支中也可使用
#

7. Record<K, V> 在字典对象与 i18n 文案映射的工程化应用

A Record<K, V> 的键只能是数字
B Record 与对象字面量类型没有区别
C Record<K, V> 不允许值类型为联合类型
D Record<K, V> 通过映射类型把键集合 K 映射为值类型 V,可用联合类型约束字典键并配合 keyof 实现 i18n 文案的编译期校验 ✓ 正确答案
#

8. Readonly<T> vs Immutable<T> 与 React Props/State 不可变契约

A Readonly<T> 是浅层编译期只读,Immutable 数据结构在运行时强制不可变,二者层次不同,可组合用于 React 不可变契约 ✓ 正确答案
B Readonly<T> 会递归冻结嵌套对象
C React 的 state 可以直接赋值修改
D Immutable<T> 与 Readonly<T> 完全等价
#

9. 模板字面量类型在路由与权限字符串模式构建中的应用

A 模板字面量类型可将路由/权限字符串模式编码为类型,并借助 infer 推导参数对象或枚举合法权限组合 ✓ 正确答案
B 模板字面量类型无法约束 URL 路径格式
C 权限字符串只能用运行时枚举校验
D 模板字面量类型与 satisfies 互斥
#

10. 映射类型与键重映射(as 子句)的转换

A 映射类型不能修改属性的可选性
B 键重映射(as 子句)支持用 as never 过滤键、用模板字面量改键名、按条件保留键,是映射类型的重要扩展 ✓ 正确答案
C 键重映射只能把键转为字符串
D 映射类型与条件类型无法组合使用
#

11. Parameters<T>/ConstructorParameters<T> 在泛型库 API 中的边界

A Parameters<T> 可以提取泛型函数未实例化时的具体参数
B Parameters<T> 对重载函数总是提取第一个签名
C ConstructorParameters<T> 提取的是构造函数的名字
D Parameters<T> 通过条件类型匹配函数签名提取参数元组,但泛型函数未实例化时无法得到具体参数 ✓ 正确答案
#

12. 条件类型与 infer 的类型提取能力

A infer 只能用于数组类型
B 条件类型不会对联合类型做分布
C 条件类型对裸类型参数会做分布式展开,每个联合成员单独判断后重组 ✓ 正确答案
D 条件类型无法递归
#

13. moduleDetection 在测试与 CI 的工程价值

A moduleDetection: auto 下无 import/export 的文件被视为模块
B moduleDetection 控制文件被识别为模块还是脚本,force 强制所有文件为模块,有助于 CI 与本地类型检查一致 ✓ 正确答案
C moduleDetection 只影响运行时模块加载
D moduleDetection: legacy 会把所有文件强制为模块
#

14. Awaited<T>、PromiseSettledResult<T>、Uppercase<T> 等工具类型的边界与组合

A Awaited<T> 只解包一层 Promise
B PromiseSettledResult 只有 fulfilled 一种状态
C Uppercase<T> 在运行时转换字符串大小写
D PromiseSettledResult<T> 是包含 status 判别字段的联合类型,与 Promise.allSettled 的返回结构对应 ✓ 正确答案
#

15. 模板字面量类型与 intrinsic string manipulation(TS 4.1+)的边界

A 模板字面量类型可以对任意 string 变量做模式收窄
B 可以自由实现自定义 Uppercase<T> 覆盖内置行为
C Uppercase 等字符串操作类型由编译器内置实现(intrinsic),且模板字面量类型对宽 string 类型无法收窄 ✓ 正确答案
D 模板字面量类型展开没有性能代价
#

16. Mutable<T>/DeepMutable<T> 在表单状态可变建模的应用

A DeepMutable 会把函数类型的参数也递归展开
B Mutable<T> 与 Readonly<T> 效果相同
C Mutable<T> 通过 -readonly 映射移除 readonly 修饰符,DeepMutable 递归处理嵌套对象 ✓ 正确答案
D readonly 修饰符可以在运行时修改对象
#

17. Awaited 与 Promise.all 返回值类型推导的工程价值

A Awaited<T> 递归解包 Promise 与 thenable,是 Promise.all 返回值类型精确推导的基础 ✓ 正确答案
B Promise.all 返回 Promise<[Promise<T>, Promise<U>]>
C Awaited<T> 只能处理一层 Promise
D Promise.all 的返回类型无法由 TypeScript 推导
#

18. DeepReadonly/DeepPartial 在不可变数据建模中的应用

A DeepReadonly 会把函数类型也递归展开为只读属性
B DeepReadonly 与 Readonly 完全相同
C DeepPartial 会让所有属性变为必填
D DeepReadonly 递归标记嵌套属性为只读,需处理函数、Date 等非递归边界;DeepPartial 适用于部分更新请求建模 ✓ 正确答案
#

19. satisfies 与类型断言的差异及团队规范

A satisfies 会强制改变表达式的类型为宽类型
B satisfies 校验形状但保留字面量窄类型推断,as 断言强制改变类型,团队规范应优先使用 satisfies ✓ 正确答案
C as 断言不会掩盖类型错误
D satisfies 与 as 完全等价
#

20. Partial、Required、Pick、Omit、Exclude、Extract、ReturnType 的内部实现

A Partial 会把属性变为必填
B ReturnType 通过映射类型实现
C Omit<T, K> 通过 Pick<T, Exclude<keyof T, K>> 组合实现,Exclude 依赖分布式条件类型 ✓ 正确答案
D Exclude 只能用于对象类型
#

21. composite/declarationMap 与 tsc/swc/esbuild 构建链的协作边界

A esbuild 可以生成 .d.ts 声明文件
B composite 需配合 declaration 与 Project References 做增量构建,declarationMap 支持从声明跳转源码;.d.ts 产出依赖 tsc ✓ 正确答案
C declarationMap 与源码跳转无关
D composite 模式下不需要 tsc --build
#

22. Awaited<T>、Promise<Awaited<T>> 在异步函数类型提取与递归解包

A Awaited 只能解包一层 Promise
B Promise<Awaited<T>> 与 Promise<T> 永远等价
C Awaited 会把 thenable 保留不解包
D Awaited<T> 递归解包 Promise 与 thenable 直到非 Promise 类型,Promise<Awaited<T>> 显式表达解包后再包装的异步结果类型 ✓ 正确答案
#

23. 类型级状态机 与运行时验证(zod/valibot)的协作

A 类型级状态机用判别联合在编译期建模状态流转,zod/valibot 在运行时验证外部输入,二者通过 schema 与 infer 协作 ✓ 正确答案
B 类型级状态机的状态约束在运行时仍然有效
C zod 的 schema 与类型完全无关
D 判别联合无法配合 switch 收窄状态
#

24. 类型级事件名生成 与 tsc/swc/esbuild 构建链的协作边界

A 类型级事件名生成会在运行时生成事件对象
B 事件名联合无法约束 emit 的参数
C swc 需要特殊配置才能处理模板字面量类型
D 类型级事件名生成在编译期推导事件名字符串联合,运行时零产物,需用 as const 同源数据保证类型与运行时一致 ✓ 正确答案
#

25. this 参数类型(ThisParameterType、OmitThisParameter)在库函数的边界适配

A this 参数会占据运行时参数位
B OmitThisParameter 只作用于类方法
C ThisParameterType<T> 提取函数的 this 类型,OmitThisParameter<T> 剥离 this 参数得到纯函数签名,用于回调边界适配 ✓ 正确答案
D this 参数的类型声明不影响调用检查
#

26. 外部输入以 unknown 接收再通过类型守卫收窄的边界适配

A 外部输入用 any 接收比 unknown 更安全
B unknown 强制外部输入先验证后使用,typeof/instanceof/in 与自定义 is 守卫逐层收窄,复杂结构可用运行时 schema 验证兜底 ✓ 正确答案
C typeof 守卫可以把 unknown 收窄为任意接口类型
D unknown 与 any 在类型检查上完全等价
#

27. 类型守卫(typeof/instanceof/in/自定义 is)与 asserts 函数

A typeof/instanceof/in 覆盖基础收窄,自定义 is 守卫封装复杂校验,asserts 函数断言失败即抛错、通过后类型收窄 ✓ 正确答案
B typeof 守卫可以收窄到任意接口类型
C asserts 函数断言通过后不会收窄类型
D in 运算符用于判断基本类型
#

28. 泛型参数、约束与默认类型在 API 设计中的实践

A 泛型默认类型必须放在无默认类型的参数之后 ✓ 正确答案
B extends 约束会强制类型为字面量
C 泛型参数不能设置默认值
D 约束越严格越好,不受 API 实际能力影响
#

29. 联合类型、判别联合与交叉类型在业务状态建模中的应用

A 判别联合无法与 switch 配合
B 交叉类型永远不会产生属性冲突
C 联合类型表达多个结构叠加
D 判别联合通过字面量判别字段配合穷尽检查实现分支安全收窄,是业务状态建模的主要手段 ✓ 正确答案
#

30. interface 与 type 的声明合并、扩展与计算属性差异

A type 支持声明合并
B type 与 interface 在所有场景完全等价
C interface 支持计算属性类型
D interface 支持同名声明合并且可 extends 扩展,type 支持计算属性、映射类型等全部类型运算 ✓ 正确答案
#

31. any、unknown、never、void 的边界与适用场景

A any 关闭类型检查是逃生舱,unknown 使用前必须收窄,never 表示不可达值用于穷尽检查,void 表示函数无有效返回值 ✓ 正确答案
B unknown 类型的值可以直接进行任意运算
C never 与 void 语义相同
D unknown 与 any 在赋值方向上都不可逆
#

32. T extends (...args: any) => infer R ? R : never 在参数与返回值推断的工程价值

A 非函数类型传入时会进入 infer 分支
B infer 只能提取一个类型变量
C 通过 (...args: infer P) => infer R 可同时提取参数元组与返回值,非函数类型落入 never 分支 ✓ 正确答案
D 该模式与函数重载无关
#

33. NonNullable<T> 与显式空值收缩在领域模型的协作

A NonNullable<T> 会保留 undefined 剔除 null
B NonNullable 只对对象类型有效
C 类型层面剔除空值即可保证运行时无 null
D NonNullable<T> 从联合类型中剔除 null 与 undefined,与边界处的显式收缩配合可在类型层面表达非空处理域 ✓ 正确答案
#

34. Uppercase/Lowercase/Capitalize/Uncapitalize 内置字符串工具类型的边界

A Capitalize<T> 会把字符串全部转为大写
B 用户可以自定义实现覆盖内置 Uppercase
C 这四个类型可以在运行时修改字符串
D Uppercase/Lowercase/Capitalize/Uncapitalize 是编译器内置的字符串操作类型,对字面量产生新字面量类型,对宽 string 不产生字面量结果 ✓ 正确答案
#

35. TypeScript 结构化类型(structural typing)

A TypeScript 采用结构化类型系统,形状兼容即可赋值,灵活性高但同构不同义的值无法靠类型名区分 ✓ 正确答案
B TypeScript 按类型声明的名称判断兼容性
C 两个结构相同但来源不同的接口无法互赋
D 类的私有成员不影响结构化兼容
#

36. 联合类型(union types)与交叉类型(intersection types)

A 联合类型可以无条件访问所有成员的属性
B 交叉类型表达"或"关系
C 联合类型访问成员前通常需要类型收窄 ✓ 正确答案
D 交叉类型的同名属性冲突不会影响类型
#

37. 字面量类型(literal types)在枚举替代与配置项约束的应用

A let 声明的字符串变量默认推断为字面量类型
B 对象属性赋值字符串不会拓宽
C 字面量类型只能用于数字
D 多个字面量组成联合可约束配置项取值,但需用 as const 或 const 声明防止字面量拓宽 ✓ 正确答案
#

38. as const 断言在对象字面量与元组类型推断的工程价值

A as const 会把数组推断为 string[]
B as const 使对象深度只读并保留字面量类型、数组推断为元组,配合 typeof/keyof 可让类型与常量表同源 ✓ 正确答案
C as const 只能用于对象,不能用于数组
D as const 之后属性仍可重新赋值
#

39. 映射类型(mapped types)在 API 响应包装与字段重命名的应用

A 映射类型结合键重映射可实现 API 响应包装、字段重命名(如 snake_case 转 camelCase)与字段筛选 ✓ 正确答案
B 映射类型只能复制键不能改变键名
C 映射类型无法处理可选属性
D 响应解包必须手写每个字段
#

40. as const 字面量推导 在 Monorepo 与项目引用的协作

A as const 的常量跨包导入后会被拓宽为宽类型
B as const 使共享包常量的字面量类型跨包可见,配合 Project References 需保证引用依赖图正确以使增量缓存及时失效 ✓ 正确答案
C Monorepo 中 as const 只影响运行时
D 项目引用不支持共享常量类型
#

41. 函数重载与联合类型/条件类型的选择标准,可读性、类型推断精度与维护成本的工程权衡

A 参数形态离散且少用重载,形态统一用联合参数,按输入映射输出用条件类型,需权衡可读性与推断精度 ✓ 正确答案
B 函数重载数量越多维护成本越低
C 联合参数可以表达参数与返回值的配对关系
D 条件返回类型不需要泛型支持
#

42. 为无类型 JS 库编写声明文件(.d.ts)的流程,模块声明、类型测试与 DefinitelyTyped 发布

A .d.ts 文件可以包含运行时实现
B 声明文件通过 declare module 描述模块导出,用 tsd/expectTypeOf 做类型测试,DefinitelyTyped 按规范目录发布 @types 包 ✓ 正确答案
C 类型测试只能手动比对
D DefinitelyTyped 不需要 CI 类型检查
#

43. keyof 与 Lookup Types 在类型查询与约束的现代应用

A keyof 提取的是值类型
B T[K] 中的 K 可以是任意类型
C keyof 提取键联合、T[K] 索引访问取值类型,组合可实现键与值的类型联动约束 ✓ 正确答案
D keyof 对数组类型无效
#

44. 模板字面量类型(template literal types)

A 模板字面量类型可声明字符串模式、自动展开联合组合,并借助 infer 从字符串中分解出片段 ✓ 正确答案
B 模板字面量类型中的 ${T} 只能是单个字面量
C 模板字面量类型无法约束事件名
D 模板字面量类型与普通 string 等价
#

45. never 类型在穷尽性检查(exhaustiveness checking)的工程价值

A never 类型可以被任何类型赋值
B never 与 unknown 等价
C 穷尽性检查需要在运行时判断分支
D 在 default 分支将收窄后值断言为 never 可触发穷尽性检查,判别联合新增分支时消费点立即编译报错 ✓ 正确答案
#

46. 函数重载(function overloads)在多签名 API 的工程取舍

A 重载可以覆盖泛型函数的任意调用形态
B 重载签名数量不影响任何维护成本
C 实现签名必须是第一个
D 重载按声明顺序匹配,最后一个签名是必须兼容全部入参的实现签名 ✓ 正确答案
#

47. 类型兼容(assignability)与子类型(subtype)

A 对象变量赋值时也会检查多余属性
B 函数参数在 strictFunctionTypes 下是协变的
C 可赋值性基于结构化子类型关系,并叠加多余属性检查、弱类型检查与函数变体规则 ✓ 正确答案
D 子类型关系与可赋值性无关
#

48. unknown 与 any 在类型安全与渐进迁移的工程差异

A any 完全关闭类型检查且会污染下游推断,unknown 强制先收窄后使用,渐进迁移时 any 作临时逃生舱、unknown 作边界缓冲 ✓ 正确答案
B any 与 unknown 在类型安全上等价
C unknown 类型的值可以直接返回给外部
D 迁移项目应禁止使用 unknown
#

49. 索引签名(index signatures)与 Record<K, V> 在字典类型的工程应用

A Record<K, V> 的键可以是任意字符串
B 键集合已知且有限时用 Record<K, V> 约束键联合,键完全动态时用索引签名,且需注意索引访问可能返回 undefined ✓ 正确答案
C 索引签名不会影响显式属性的类型
D Record 只能用于空对象
#

50. const 类型参数(f<const T>(x: T))与字面量类型推导的工程取舍

A const 类型参数使泛型按最窄字面量推断(对象不拓宽、数组为元组),调用方无需 as const,常配合 satisfies 校验形状 ✓ 正确答案
B const 类型参数与普通泛型推断行为完全相同
C const 类型参数只对数字有效
D const 类型参数在运行时修改对象
#

51. NoInfer<T>(TS 5.4)在防止默认参数位置泛型推断泄露的工程价值

A NoInfer 会把类型强制改为 never
B NoInfer 标记的位置不参与泛型推断,但仍按类型校验 ✓ 正确答案
C NoInfer 只能用于函数返回类型
D NoInfer 增加推断的来源位置
#

52. InstanceType<T>/ThisType<T> 在 Mixin 与多态工厂的应用

A InstanceType<T> 从构造函数类型提取实例类型 ✓ 正确答案
B InstanceType 从实例取构造函数类型
C ThisType<T> 改变运行时 this
D Mixin 无法组合多个类的能力
#

53. Record<string, T> 与 Record<keyof X, T> 在动态键与精确键的取舍

A 键集合静态已知用 Record<keyof X, T> 获得校验与补全,键动态时用 Record<string, T> 并处理索引访问的 undefined 边界 ✓ 正确答案
B Record<string, T> 会对键做编译期拼写校验
C 两种写法完全等价
D Record<keyof X, T> 允许任意字符串键
#

54. 递归类型(Recursive Types)的边界与可维护性

A 递归类型表达树形/嵌套结构,必须有非递归基础分支终止,且受实例化深度限制,复杂递归应拆分为命名类型治理 ✓ 正确答案
B 递归类型不需要基础分支即可终止
C 递归类型的深度没有限制
D 递归类型无法表达 JSON 结构
#

55. @types/* 与 TC39 标准化进程的协作

A @types/* 为 JS 生态提供类型声明,随 TC39/WHATWG 提案与实现演进同步更新,需保持版本对应并治理废弃 ✓ 正确答案
B @types/* 包提供运行时实现
C TC39 提案与类型声明无关
D lib.dom.d.ts 永远不会更新
#

56. 类型级递归深度限制与 IDE 性能 在 Monorepo 与项目引用的协作

A 类型递归没有深度限制
B 类型级递归有深度与实例化成本限制,Monorepo 中应利用 Project References 的 .tsbuildinfo 缓存并拆分复杂类型治理 IDE 性能 ✓ 正确答案
C IDE 类型检查与 tsc 完全独立
D 共享类型包不影响消费包编译性能
#

57. moduleResolution: bundler 在 SSR/Hydration 边界的类型契约

A moduleResolution: bundler 可以用于纯 Node 运行时
B SSR 与客户端不需要同一份类型契约
C bundler 模式禁止使用 exports 字段
D moduleResolution: bundler 匹配打包器解析语义(exports 条件、无扩展名导入),SSR/Hydration 场景需保证双端导出的类型契约一致 ✓ 正确答案
#

58. isPlainObject / isUnion / type Guard helpers 在运行时与编译时类型边界协同的工程价值

A isPlainObject 返回的是 boolean,不影响类型
B 类型守卫只能在编译期工作
C 类型守卫通过 x is T 谓词把运行时校验映射为编译期类型收窄 ✓ 正确答案
D 守卫与 schema 校验互相排斥
#

59. RequiredKeys<T>/OptionalKeys<T> 工具类型在表单契约的应用

A RequiredKeys<T> 提取可选键
B Pick 无法配合键集合使用
C 必填键与可选键无法在类型层面区分
D 利用 {} extends Pick<T, K> 可区分键的必填性,RequiredKeys/OptionalKeys 提取的键集合可驱动表单校验契约 ✓ 正确答案
#

60. Uppercase<T>/Lowercase<T> 在 CSS-in-JS 类名与 i18n 键名的工程应用

A Uppercase<T> 在运行时修改字符串
B i18n 键名无法用类型约束
C 字符串操作类型不能用于类名推导
D Uppercase/Lowercase 在编译期生成规范形态的字符串字面量,可与模板字面量组合约束 CSS-in-JS 类名与 i18n 键名的约定 ✓ 正确答案
#

61. 类型测试(expectTypeOf/tsd)对自定义工具类型的验证

A tsd/expectTypeOf 提供 toEqualTypeOf 等断言验证类型关系,配合 @ts-expect-error 覆盖负向用例,可接入 CI 保障工具类型契约 ✓ 正确答案
B tsd 只能测试运行时行为
C 类型测试无法验证失败分支
D expectTypeOf 只能用于函数类型
#

62. infer const 提案与字面量类型提取

A infer const 提案让 infer 结果保留最窄字面量类型,当前可结合 const 类型参数与 as const 接近该效果 ✓ 正确答案
B infer 默认会保留字面量窄类型
C infer const 已经发布为稳定特性
D infer 无法提取字面量类型
#

63. readonly 修饰符在不可变数据与状态管理的工程价值

A readonly 属性在运行时不可修改
B readonly 在编译期禁止属性赋值,适合表达状态管理的只读契约,但只覆盖浅层,深层需 DeepReadonly ✓ 正确答案
C readonly 数组与可变数组完全等价
D readonly 只能用于类属性
#

64. 类成员的访问修饰符(public、protected、private)

A private 成员在子类中可访问
B protected 成员外部可以直接访问
C public/protected/private 是编译期可见性约束,与 ES # 私有字段(运行时硬约束)不同,扩展点应使用 protected ✓ 正确答案
D private 修饰符会阻止运行时访问
#

65. 抽象类(abstract class)与接口(interface)

A 接口可以包含方法实现
B 抽象类可以实现多个基类
C 抽象类可包含实现与抽象成员且存在运行时对象,接口是纯类型形状,一个类可实现多个接口 ✓ 正确答案
D 接口编译后有运行时产物
#

66. Partial、Required、Pick、Omit 在 DTO 转换的工程应用

A 创建/更新/查询 DTO 分别可用 Omit、Partial、Pick 等组合建模,与服务端生成字段、可更新字段、返回字段的语义对应 ✓ 正确答案
B UpdateDTO 通常用 Omit<Entity, 'id'> 表达全部必填
C Partial 会让字段变为必填
D DTO 类型与运行时转换无关
#

67. 类型化事件(typed events)在 DOM 与自定义事件总线的应用

A addEventListener 的回调参数总是 any
B CustomEvent 无法携带类型化载荷
C DOM 事件回调参数由内置事件映射推导,自定义事件总线可用映射类型实现"事件名-载荷类型"联动约束 ✓ 正确答案
D 事件总线的事件名无法用类型约束
#

68. TypeScript 5.x 新的 const 类型参数在字面量保留的工程价值

A const 类型参数与普通泛型推断一致
B const 类型参数只能用于类
C const 类型参数运行时冻结对象
D const 类型参数在调用处保留最窄字面量(对象不拓宽、数组为元组),适合配置表类 API 的精确类型推导 ✓ 正确答案
#

69. satisfies 操作符在保留字面量类型与校验形状的工程应用

A satisfies 会强制表达式类型变为目标类型
B satisfies 与 as 完全等价
C satisfies 只校验形状、保留字面量窄类型,适合配置表/路由表"校验 + 字面量派生"场景 ✓ 正确答案
D satisfies 会移除属性
#

70. 递归类型(recursive types)在树形结构与 JSON Schema 的应用

A 树形结构无法用类型表达
B 递归类型只能表达链表
C 递归类型通过自引用与基础分支建模树形结构与 JSON 数据,可与 z.lazy 等运行时 schema 配合实现类型与校验一致 ✓ 正确答案
D JSON 类型无法覆盖嵌套数组
#

71. 类型索引访问(T[K])与索引访问类型在大型 API 的工程实践

A T[K] 中的 K 不需要在 keyof T 中
B T[K] 只能用于数组
C T[K] 按键提取值类型,可逐层/联合取值并配合 keyof 实现键值联动,深层路径应抽成具名别名 ✓ 正确答案
D T[K] 返回的是键名