TC39 与 TypeScript

共 18 题
#

1. Decorators 元数据需求与装饰器标准本身应如何区分,避免继续依赖已废弃的实验语义

A 标准 Decorators 采用 (value, context) 签名,元数据是独立提案,不应因元数据需求继续依赖实验语义 ✓ 正确答案
B 标准装饰器可以任意改写被装饰的类
C experimentalDecorators 与标准 Decorators 语义完全一致
D 元数据已随 Decorators 一起定稿
#

2. Iterator Helpers 与 Array 链式方法在无限序列、一次性迭代器和提前终止场景下分别会发生什么

A break 不会影响迭代器内部状态
B Iterator Helpers 是急切求值
C Iterator Helpers 惰性求值支持无限序列,数组方法急切求值会耗尽内存,且迭代器一次消费、break 时传播关闭 ✓ 正确答案
D 数组与迭代器都可以任意重放
#

3. ShadowRealm、Worker、iframe sandbox 与 Node.js vm 的隔离保证为什么不能等同

A ShadowRealm 提供同线程同步隔离上下文,Worker 是线程级异步通信,vm 不构成对抗恶意代码的安全边界 ✓ 正确答案
B Worker 与主线程可以同步共享对象引用
C iframe sandbox 不提供任何隔离
D Node.js vm 是可靠的安全隔离边界
#

4. 提案从 Stage 2、2.7、3 到 4 发生状态变化时,编译器插件、polyfill 和 lint 规则应按什么顺序退出

A Stage 3 语义仍会任意变化
B polyfill 可以无条件永久保留
C 提案定稿后应按 polyfill、编译器插件、lint 规则的顺序退出,并以双轨对比验证行为一致 ✓ 正确答案
D Stage 2 提案即可作为生产依赖
#

5. 从 TypeScript 5.x/6.x 迁移到 7.0 时,怎样用双编译结果比较诊断差异、声明文件和 sourcemap

A TS 7.0 与旧版编译器行为完全一致
B 迁移应用双编译结果对比:归一化诊断差集、diff 声明文件并实测 sourcemap 后,再切换默认编译器 ✓ 正确答案
C 声明文件差异无需检查
D 诊断数量相同即证明行为一致
#

6. monorepo 如何结合 isolatedDeclarations、项目引用和 declarationMap 缩短增量类型检查的关键路径

A declarationMap 与调试无关
B 项目引用会重新编译所有上游源码
C isolatedDeclarations 支持按文件独立生成声明,配合项目引用与 declarationMap 可缩短增量检查关键路径 ✓ 正确答案
D isolatedDeclarations 需要全程序推断才能生成声明
#

7. Temporal 的 Instant、ZonedDateTime、PlainDateTime、Duration 与 Calendar 如何阻止把绝对时间、墙上时间和日历日期混为一谈

A Instant 表示带时区的墙上时间
B PlainDateTime 自动应用时区偏移
C Instant 表达绝对时间、ZonedDateTime 叠加时区日历、PlainDateTime 是墙上时间,类型选择可防止时区混用错误 ✓ 正确答案
D Duration 是绝对时间点
#

8. 标准 Decorators 的求值顺序、上下文对象、initializer 与旧版 TypeScript experimentalDecorators 语义有哪些不兼容点

A 标准装饰器使用 (value, context) 签名与 addInitializer,求值顺序和改写能力均与旧版不同,迁移需双编译验证 ✓ 正确答案
B 两种装饰器的 initializer 语义相同
C 标准装饰器签名与 experimentalDecorators 完全一致
D 标准装饰器可以直接修改类名
#

9. Iterator Helpers 在同步迭代器上的惰性 map、filter、take、drop、flatMap 与终结操作如何传播关闭和异常

A 迭代器可以不关闭而自动释放资源
B Iterator Helpers 会急切计算整个序列
C 异常不会传播到消费方
D helper 链惰性执行,take 耗尽或 break 会沿链传播 return() 关闭源头迭代器并释放资源 ✓ 正确答案
#

10. Import Attributes 的静态导入、动态导入及模块缓存键如何处理 JSON 等非 JavaScript 模块

A JSON 模块内容会被当作脚本执行
B 动态导入不能使用 Import Attributes
C 同一 URL 不同属性共享同一缓存
D 静态与动态导入均可携带 with { type: 'json' },模块缓存键包含 URL 与属性,JSON 模块按数据解析而非执行 ✓ 正确答案
#

11. TypeScript 7.0 原生编译器迁移中,tsconfig 兼容范围、语言服务协议和旧插件依赖应如何验收

A 迁移需验收 tsconfig 选项矩阵、语言服务协议兼容性与 transform 插件替代方案,并保留回滚 ✓ 正确答案
B 基于 transform API 的插件天然兼容 7.0
C 语言服务协议在 7.0 中未发生变化
D TS 7.0 兼容所有旧 tsconfig 选项与插件
#

12. isolatedDeclarations 为什么要求导出 API 具有可独立推导的显式类型,它如何让声明生成支持并行化

A isolatedDeclarations 要求导出类型显式可推导,使声明生成按文件独立并行,大幅缩短大型仓库增量检查时间 ✓ 正确答案
B 该选项只影响运行时行为
C isolatedDeclarations 会增加推断负担
D 声明生成历来按文件独立完成
#

13. Pattern Matching 提案尚未定稿时,哪些语法和穷尽性假设不应进入生产代码或公共类型声明

A Stage 1 提案的语法可以写入公共类型声明
B 穷尽性检查语义在草案阶段已冻结
C 提案越新越应该在生产中采用
D 未定稿提案的语法与穷尽性语义会变动,生产与公共声明应使用标准类型表达,实验代码隔离在 flag 内 ✓ 正确答案
#

14. 如何依据 TC39 阶段、规范文本、test262、引擎实现和 Baseline 状态维护提案采用清单

A test262 与引擎实现无关
B Stage 2 提案即可默认启用
C 综合 TC39 阶段、规范文本、test262、引擎实现与 Baseline 五类信号维护清单,Baseline 普及后才移除 polyfill ✓ 正确答案
D 规范文本与实现可以任意不一致
#

15. Temporal polyfill 与原生实现并存时,序列化、时区数据库版本和跨 Realm 品牌检查怎样保持一致

A polyfill 与原生对象可以直接互相赋值
B 品牌检查只在 polyfill 内部生效
C polyfill 与原生并存时需用 ISO 字符串交换、处理 tzdata 版本差异,并桥接品牌检查 ✓ 正确答案
D 时区数据库在所有浏览器中版本一致
#

16. 原生编译器性能提升后,哪些瓶颈仍可能来自模块解析、声明膨胀、编辑器插件或文件系统

A 声明文件大小不影响检查性能
B 文件系统性能与类型检查无关
C 原生编译器提速后不存在其他瓶颈
D 模块解析、声明膨胀、编辑器插件与文件系统 IO 仍是主要瓶颈,可分别用缓存、skipLibCheck、插件审计与增量构建缓解 ✓ 正确答案
#

17. 第三方类型包未适配严格索引访问时,应用代码、适配声明与上游修复的责任边界如何划分

A 上游类型错误与本地无关
B 适配声明可以随意扩大第三方类型
C 开启 noUncheckedIndexedAccess 后应全部使用非空断言
D 应用层做类型收缩,适配声明只修正第三方包的错误类型并关联上游修复,避免长期本地补丁 ✓ 正确答案
#

18. 发布 npm 类型包时怎样验证不同 TypeScript 版本对 exports、typesVersions 与生成声明的解析一致性

A typesVersions 仅供旧版本 TS 使用,无需测试
B 只要 package.json 里有 types 字段就万事大吉
C 需用多 TS 版本模拟消费者验证 exports 与 typesVersions 解析一致,并用 tsd 与审计工具检查声明 ✓ 正确答案
D exports 的 types 条件不影响解析