原文标题:使用 Trae 快速上手微信小程序开发

原文作者:华山风清扬

原文链接:https://juejin.cn/post/7492969116610789427

笔者最近需要为孩子班级开发一款小程序,用来统计孩子们每周的操行分数。

笔者只有后端开发经验,对于微信小程序的开发是一窍不通的。但是没关系,有了 Trae 的帮助,我们可以快速打破现有的技术壁垒,快速上手未知的技术领域。

我们下载好微信开发者工具,利用向导生成一个 Hello World 小程序。笔者觉得微信开发者工具使用体验远远逊于 Trae 啊,外接显示器时整个 IDE 的缩放老是有问题。

所以使用微信开发者工具创建完第一个 Hello World 的微信小程序后,我就把它抛弃了。打开 Trae,使用 Open Folder 功能,打开整个文件夹,发现有个 typings 文件夹,下面有很多 .d.ts 文件。

我询问了 Trae,这些 .d.ts 文件拿来干嘛的?Trae 耐心地解释:

在微信小程序项目中,typings 文件夹用于存放 TypeScript 的类型定义文件,它们为微信小程序的 API 和组件提供类型声明。这些文件通常来自以下几个来源:

  1. 微信官方提供的类型定义包(@types/wechat-miniprogram)

  2. 项目初始化时自动生成

  3. 开发者手动添加的自定义类型定义

这些类型定义文件(.d.ts)不会被编译到最终代码中,但它们在开发过程中为 TypeScript 编译器和 IDE 提供类型检查和代码补全功能,使开发更加高效和减少错误。从您项目中的文件可以看出,这些定义文件包含了微信小程序的组件、API、行为等类型定义。

有了理论基础,下面开始动手开发。 发出指令:

对这个微信小程序的代码进行修改,在小程序界面上随机出一道100以内的加减法口算题,提供一个输入框,让用户输入答案。如果用户答案正确,显示"恭喜你!".

如果用户答案错误,显示:“正确答案是:”,并显示这道题的正确答案。

我觉得 Trae 对程序员比较有帮助的一点是,我们发出需求后,它会把如何实现这个需求的分析过程也显示出来,方便我们学习。

因为现在我对微信小程序开发还一窍不通,只有直接点击Accept All,看看 Trae 帮助我做了哪些修改:

点了 Accept 按钮之后,回到微信开发者工具进行预览,发现一次成功了,Trae 真的是太强了:

答对的情况:

答错的情况:

我学习了一下 Trae 生成的代码,在 Calc.js 的 Page 构造函数里,传递了一个巨大的 JSON 对象进去,这个对象里除了 data,onLoad 这些标准属性外,还有一个自定义函数 generateQuestion 负责生成随机题目。

并且在 app.json 里,自动将 calc 视图放在了 pages 数组的第一个位置,这样就将其设置成了首页。

Trae 还强调了 app.ts 里 App 构造函数的参数定义,对于我这个 Java 开发人员来说,这些类型安全的语言设计理解起来没有任何难度。

这段 TypeScript 代码:

type Instance<T extends IAnyObject> = Option & T
    type Options<T extends IAnyObject> = Partial<Option> &
        T &
        ThisType<Instance<T>>

Instance<T extends IAnyObject> = Option & T 定义了小程序App实例的类型,它是Option接口(包含生命周期函数如onLaunch、onShow等)与泛型T的交叉类型。这意味着App实例不仅包含标准的生命周期方法,还可以包含开发者自定义的属性和方法。

Options<T extends IAnyObject> = Partial<Option> & T & ThisType<Instance<T>> 定义了创建App时传入的配置对象类型。这里有三个关键点:

1)Partial<Option> 表示生命周期方法是可选的;

2) 与泛型T的交叉使开发者可以添加自定义属性;

3)ThisType<Instance<T>> 是TypeScript的特殊工具类型,它指定了配置对象中方法的this上下文类型,确保在方法内部可以正确访问App实例的所有属性和方法。

这种设计使微信小程序的App构造函数既保持了类型安全,又提供了足够的灵活性,允许开发者扩展App实例的功能。通过泛型和交叉类型的组合,实现了类型系统的可扩展性和代码提示的准确性,是TypeScript高级类型系统应用的典型案例。