用途:把 UI5(SAPUI5/OpenUI5)项目从 JavaScript 迁移到 TypeScript,覆盖项目配置、应用代码、自定义控件与控件库,测试转换另有单独文档。
主要能力与规则:转换时保留全部 JSDoc 与注释;按步骤进行,先完成 TypeScript 项目配置,再转换被依赖的中心文件;tsconfig.json 中可用 "allowJs": true 支持半转换状态。避免 any,改用具体类型或自定义接口;避免 unknown 强转,应导入并使用真实 UI5 控件类型,事件使用如 Route$PatternMatchedEvent 的具体类型;共享类型集中放在 src/types/。
项目配置:package.json 增加所需 dev 依赖(不提升已有主版本、不删除已有依赖),并按 UI5 版本添加 @sapui5/types 或 @openui5/types,增加 "ts-typecheck": "tsc --noEmit" 脚本;新增 tsconfig.json(含 target、module、paths、types 等);ui5.yaml 增加 ui5-tooling-transpile-task 与 ui5-tooling-transpile-middleware;仅在已有 eslint 时补充 TypeScript 配置。
代码转换:将 SuperClass.extend(...) 改为 ES class,配置对象成员变为类成员,类前加 @namespace JSDoc;sap.ui.define 改为 ES import 与 export default,sap.ui.require 改为 import,方法内动态 require 改为动态 import;补充参数与变量类型、私有成员声明,将 bind 改为箭头函数;泛型方法返回值按上下文强转为具体子类型(如 byId、getBinding、getModel、getSource、getRootControl、getOwnerComponent)。
自定义控件:UI5 运行时生成 getter/setter 等方法,TypeScript 不可见,需安装 @ui5/ts-interface-generator 并运行生成 *.gen.d.ts(提交且不手改);手动把生成的构造函数签名复制到类体开头;metadata 类型为 MetadataOptions(自 UI5 1.110 起,早期用 object);必须使用 export default 紧跟类声明;metadata 与 renderer 为静态成员。控件库还需在 library.ts 中把枚举挂到全局库对象(避免 XSS),并在 tsconfig.json 配置命名空间路径映射。
限制:资料未提供具体依赖版本号、完整测试转换步骤及收费信息;遇到不确定的类型问题应跳过强转并告知开发者。