选择 typescript 的原因及优势:强类型语言的优点与小程序对其的支持

2024-06-19
来源:网络整理

你为什么选择?

强类型语言的优点

1. 错误可以更早暴露。大量的异常可以在编码阶段被消除,而不必等到运行时阶段。

2.强类型代码可以提高效率,使代码更智能,使编码更准确

3、使用强类型语言进行重构更加可靠,删除成员或者修改成员名都会立刻报错,然后做相应的修改。

4.减少不必要的类型判断

没有类型提示。相反,有一个灵活的类型系统,可以在编码期间进行检查并增强代码的可读性。它还提供任何类型进行缓冲。

小程序支持TS

d.ts 文件对于 来说非常重要,它声明了对外暴露的方法和属性,随着小程序官方的支持,开发依赖的类型声明会随着官方 API 的改变而改变,小程序自身 API 的 d.ts 文件也会自动改变,更加省力。

使用

首先,更新微信开发者工具到最新版本,并在创建新项目时选择语言。

创建后我们可以看到项目自带了库和配置文件。

事件

在文档中没看到view事件对应类型的定义,可以暂时用any,然后再用as转换一下携带的数据的类型。

页面和数据

Page 对象定义在

declare const Page: Page.PageConstructor interface PageConstructor { < D extends IAnyObject, T extends IAnyObject & PageInstance >( options: PageInstance & T ): void }

开发什么小程序比较好_小程序开发不再难_难开发程序小游戏

它支持两种范式:D和T。

通用 D

从以下页面写作

Page({});

参数为一。

interface PageInstance< D extends IAnyObject = any, T extends IAnyObject = any > extends PageInstanceBaseProps< D >

它定义了 Page 声明生命周期方法,从 s 继承,并传入泛型类型 D。

interface PageInstanceBaseProps<D extends IAnyObject = any> { data?: D //... }

可以看出,泛型类型 D 是 data 的类型接口。由于 data 不是必须实现的,所以这里是可选的。

通用 T 型

T extends IAnyObject & PageInstance

T其实是的扩展,是Page的实例接口。那么T就是Page中this的类型接口。因此,Page中需要添加的方法和属性,都是在T中定义的。

例子

对于一个普通的页面,我们可以声明两个接口,一个用于数据,一个用于页面。

interface IIntroPage { nextButtonTap(event: any): void; isLoading: boolean; } interface IIntroData { test: string } Page({ isLoading: false, nextButtonTap(event: any) { this.isLoading = true; } });

如果页面没有数据或者不需要展开页面的话,就可以用它来代替D或者T。

interface PageInstanceBaseProps< D extends IAnyObject = any > { data?: D setData?extends keyof D>( data: D | Pick | IAnyObject, callback?: () => void ): void } // "!" : 告诉编译器,data不可能为null或者undefined

同时,由于和data声明为可选,因此使用时需要添加!,this.!({})和this.data!。

使用之后就可以直接在官方API中看到参数和返回值的类型,不需要再去查文档去猜测类型了。

分享