5.3 KiB
已实现的类型检查与迁移入口
ENG-04 使用开发编译器 TypeScript 5.9.3,并将 TypeScript 4.3.5 作为 npm alias typescript-compat 固定在根开发依赖。后者仅用于旧编译器消费回归,不进入播放器运行依赖或产物。Yarn 锁文件校验现在接受精确版本的 npm alias,仍拒绝范围和浮动版本。
命令及真实覆盖
yarn typecheck
yarn ci:check
typecheck 读取根及已建立配置的分包项目,以编译器 API 执行,不依赖两个 TS 安装可能影响的全局 tsc 命令。当前根配置检查两个消费/浏览器类型文件,核心检查 14 个声明及共享资源声明,chapter 检查自身声明及共享资源声明。配置实际编译经过的生产 TS 文件数另行输出;本任务完成时为零,不能把声明检查说成生产 JS 已严格检查。
自动检查当前工作区的 TS 5.9.3 Node10+CJS、NodeNext+CJS、Bundler+ESM 及 TS 4.3.5 Node10+CJS。正例包括旧配置、ready 回调 this、插件、play 和 update;反例拒绝错误 URL/章节时间。没有 ts-expect-error 生效时编译也须报错,防止 any 或声明放宽使反例失效。
TS 5.9.3 的 NodeNext ESM 当前有 7 个准确诊断,单独保存在 test/types/known-diagnostics.json,并绑定 BASE-TYPE-01。它们来自原有默认导出声明互操作问题;检查输出明确是历史失败,不能作为候选验收通过。修复由 CORE-07、PKG-CHAPTER-04 和 ENG-07 接续,届时移除对应失败记录、增加成功消费断言,不能一键刷新以容忍新回归。
BASE-05 的四模式、16 场景、真实发布 tarball 隔离验证仍由 test:baseline 执行。本入口补上当前工作区的检查,不代替隔离发布消费;ENG-07 接入候选 tarball。BASE-TYPE-02/03/04 的可选参数、legacy 声明与返回值问题继续由原任务负责,没有在本任务偷偷修改生产声明。
配置与文件职责
| 文件 | 职责 |
|---|---|
| 根 tsconfig.base.json | 浏览器实现基线:ES2020+DOM/DOM.Iterable、strict、noUncheckedIndexedAccess、noImplicitOverride、noEmit、skipLibCheck=false、types=[] |
| 根 tsconfig.json | 当前公共消费与浏览器环境类型用例;不是无条件将全部遗留包标为已检查 |
| packages/artplayer/tsconfig.json | 核心自有 TS 及现有公开声明的入口 |
| packages/artplayer-plugin-chapter/tsconfig.json | 试点 TS 及现有公开声明的入口 |
| types/assets.d.ts | 当前 Less inline 和 SVG 的 string 导入类型;不提供泛化的任意模块声明 |
| scripts/typecheck.mjs | 固定编译器检查、分包发现、四种现代消费模式、兼容编译器与历史诊断核对 |
| test/types/ | 真实旧调用、无 Node 全局污染/数组越界反例、明确历史诊断;无运行时副作用,因为只编译不执行 |
| refactor/scripts/types.test.mjs | 验证非法旧调用、无效错误断言和生产 TS 错误确实被拒绝,检查不生成 JS |
实现由现有 bundler 构建,所以源码配置采用 Bundler 模块解析;发布声明仍须经过独立 Node 模式验证。TypeScript 模块解析说明 区分了这些模式,官方编译器选项指南 也说明 bundler 成功不保证未打包声明能被 Node 消费。
allowJs=true、checkJs=false 允许渐进迁移时引用旧 JS;只将迁移的 TS 和声明纳入配置根文件,旧 JS 不因被引用就变成已迁移。迁移任务须缩小不明确的 JS 边界,vendored 独立列入第三方台账,不能用 ts-nocheck/any 把自有代码隐藏过去。新增生产 TS 的包若没有 tsconfig,入口会拒绝继续。
不默认启用 exactOptionalPropertyTypes 去收紧旧调用允许的显式 undefined;公开类型接受范围变化需要逐项消费者证据。内部数组/索引检查启用 noUncheckedIndexedAccess,防止将不存在的元素当作已存在。浏览器 types=[] 防止依赖树中的 @types/node 自动污染 DOM 代码;worker 和 Node 工具需要自身配置,不把 DOM 与 WebWorker 全局混在一起。
编译器版本边界
4.1.6 试探无法解析当前 artplayer.d.ts 的类型内 getter(首个错误在 template.html);已改用实际通过公共消费样例的 4.3.5,并从最终依赖/锁文件移除 4.1.6。4.3.5 是当前核心/chapter 的已测旧编译器点,不是证明所有历史版本都以它为最低,也不是授权抬高用户已有支持窗口。其他包在自身契约任务核对声明语法和实际旧版本消费者;未查明时保持未知。
源码检查用 5.9.3 不要求用户也使用 5.9.3。生成声明时须保留旧编译器能理解的公开语法,并在版本落实和候选 tarball 后重跑。NodeNext/Bundler 的消费模式由当前编译器验证,不传给不具备这些模式的 4.3.5。
后续接入
新迁移包复制分包配置并按实际运行环境调整,加入特有正反例;编译器入口自动发现包配置。TS 构建入口与声明生成由 ENG-06/07 和各包迁移处理;不能只增加一个空 config 就宣布包迁移完成。所有生产变更仍按每任务独立提交和包内架构文档规则交付。