uniapp小程序迁移到TS (2)

其实本来是想写一些遇到的坑,然后发现之前迁移的过程中没跟着写这个文章,导致都忘了,现在光记着这是个比较枯燥的体力活。
对于js文件,迁移还是相对比较简单的,主要是把类型搞清楚,对于api调用,参数的类型uniapp都已经给搞好了,可以看看@dcloudio/types下定义的类型,类型搞不好的可以考虑Parameters<T>以及as,这个可以简单看看src/modules/toast.ts,如果参数数量不定,可以尝试一下泛型,对于这个可以简单看看src/modules/datetime.ts。迁移的过程中还是要首先关注最底层的js文件,例如A.js引用了B.js,那么肯定是要先更改B.js,然后再去处理A.js,要注意的是现在的tsconfig.json配置是严格模式,所以也会要求引入的文件为带类型声明的或者本身就是ts的,当然在d.ts中声明一下declare module A.js也不是不行。迁移的话首先可以将后缀直接改成.ts,然后用eslint的自动修正功能,先修正一个地方是一个地方,然后自己去修改类型,尽量别写any吧,虽然TypeScript又称AnyScript,但是还是尽量搞清楚类型,尤其是抽出model层后,带字段提示去写代码还是挺爽的,另外有一些关于类型的扩充以及全局Mixin等可以参考sfc.d.ts和mixins.ts。

// src/modules/toast.ts export const toast = (msg: string, time = 2000, icon = "none", mask = true): Promise<void> => { uni.showToast({ title: msg, icon: icon as Parameters<typeof uni.showToast>[0]["icon"], mask: mask, duration: time, }); return new Promise(resolve => setTimeout(() => resolve(), time)); }; // src/modules/datetime.ts export function safeDate(): Date; export function safeDate(date: Date): Date; export function safeDate(timestamp: number): Date; export function safeDate(dateTimeStr: string): Date; export function safeDate( year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number ): Date; export function safeDate( p1?: Date | number | string, p2?: number, p3?: number, p4?: number, p5?: number, p6?: number, p7?: number ): Date | never { if (p1 === void 0) { // 无参构建 return new Date(); } else if (p1 instanceof Date || (typeof p1 === "number" && p2 === void 0)) { // 第一个参数为`Date`或者`Number`且无第二个参数 return new Date(p1); } else if (typeof p1 === "number" && typeof p2 === "number") { // 第一和第二个参数都为`Number` return new Date(p1, p2, p3, p4, p5, p6, p7); } else if (typeof p1 === "string") { // 第一个参数为`String` return new Date(p1.replace(/-/g, "http://www.likecs.com/")); } throw new Error("No suitable parameters"); }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwsjss.html