1***@qq.com
1***@qq.com
  • 发布:2023-03-03 08:43
  • 更新:2023-03-03 08:43
  • 阅读:398

实现pages路由跳转url的ts类型检查(上)

分类:uni-app

我目前使用的是参考官方vue3+ts+vite的cli模板示例,去除暂时不涉及到的平台的npm依赖,这样就能够使用eslint+prettier等工具链以及vscode实现更贴近传统web开发的开发体验。整体运行良好,即使需要用插件库也可以通过下载解压对应包到本地实现,唯二有个两问题一直不能很好的解决,其一就是路由跳转的类型校验。

uniapp沿用和对齐微信小程序的pages.json来实现页面路由的控制,hbuilderx可以实现一部分跳转的路由提示,但还是不够完善,且不能对无效路由做错误提示。经过几次尝试,最后终于实现了一个完美的解决方案。

最开始的时候是想通过自己封装下路由,然后import pages.json中的数据结构,去实现路由的类型校验。但是因为ts对于json的解析是直接解析成了string这个比较宽泛的类别,且无法通过类型推断(as const)去实现,详见https://github.com/microsoft/TypeScript/issues/32063

既然无法通过json实现类型推断,那么可以转换下思路,通过ts去配置pages,但是uniapp不兼容这种方案。那么可以再进一步,通过ts配置pages,在执行uniapp的构建命令前根据这个pages.ts去生成pages.json。

理想很丰满,现实很骨感,这个思路的方向是对的,然而在实现pages.ts输出到pages.json出现了好多问题。迎面而来的是:这段逻辑(下称预构建,文件位于./prebuild.ts)需要执行构建命令前,运行在node运行时,而node运行时不支持解析ts文件类型。那很好办啊,通过ts-node去执行这个预购建脚本不就可以了。当我兴冲冲的修改package.json中的script里的prebuild为npx ts-node ./prebuild.ts,直接就报错了,不支持import。查了下ts-node文档,加了个--esm的执行参数,这下总行了吧?嘿嘿,没这么简单。

最终效果如图所示

0 关注 分享

要回复文章请先登录注册