笔者最近需要为孩子班级开发一款小程序,用来统计孩子们每周的操行分数。
笔者只有后端开发经验,对于微信小程序的开发是一窍不通的。但是没关系,有了 Trae 的帮助,我们可以快速打破现有的技术壁垒,快速上手未知的技术领域。

我们下载好微信开发者工具,利用向导生成一个 Hello World 小程序。笔者觉得微信开发者工具使用体验远远逊于 Trae 啊,外接显示器时整个 IDE 的缩放老是有问题。
所以使用微信开发者工具创建完第一个 Hello World 的微信小程序后,我就把它抛弃了。打开 Trae,使用 Open Folder 功能,打开整个文件夹,发现有个 typings 文件夹,下面有很多 .d.ts
文件。
我询问了 Trae,这些 .d.ts
文件拿来干嘛的?Trae 耐心地解释:
在微信小程序项目中,typings 文件夹用于存放 TypeScript 的类型定义文件,它们为微信小程序的 API 和组件提供类型声明。这些文件通常来自以下几个来源:
- 微信官方提供的类型定义包(@types/wechat-miniprogram)
- 项目初始化时自动生成
- 开发者手动添加的自定义类型定义
这些类型定义文件(.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 代码:
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高级类型系统应用的典型案例。