Vue.js 为了支持 TypeScript 也真是大刀阔斧了,从之前的
之所以 Vue.js 的类型这么不好搞定,RFC 里说得也很明确了,一个 Vue 实例的类型受多个因素影响,比如自身的 props、computed 属性,全局 mixins。props 之类的还好说,看看 Angular 的做法就知道了,用 decorator 提供元信息我觉得还算是一个比较优雅的做法,不过确实会受不稳定标准的限制,以后可能很麻烦。全局 mixins 是一个非常难搞的特性,有的 mixins 会给 Vue 实例“添加属性”,常见的解决类型问题的方式就是在 .d.ts 里手动 declare 新增的属性以扩展已有属性,我觉得不是很优雅,倒不如像 Angular 那样,由 mixins 提供 interface 让用户自己去实现。
Composition Functions 看起来是一个很聪明的做法,用 setup 方法的类型来决定实例的类型,类型的声明都变得简单了很多呢。结合之前的 Reactive API,简直完美~
当然我只是表达我的想法,具体的设计对我无所谓。:)