首先排除装饰器写法,个人偏见,实在不喜欢
然后我看了下网上不不使用装饰器的写法,当用到modules的时候,那个类型定义,真实恶心到我了。贴个代码片段吧,比如我有一个app module,这个模块Store的类型定义大致长下面这样,这玩意真是给碳基生物用的吗?能看懂,但是代码真实又臭又长。
export type AppStore<S = AppState> = Omit<VuexStore<S>, 'getters' | 'commit' | 'dispatch'>
& {
commit<K extends keyof Mutations, P extends Parameters<Mutations[K]>[1]>(
key: K,
payload: P,
options?: CommitOptions
): ReturnType<Mutations[K]>
} & {
dispatch<K extends keyof Actions>(
key: K,
payload: Parameters<Actions[K]>[1],
options?: DispatchOptions
): ReturnType<Actions[K]>
};
所以,现在vuex4的现状就是不用装饰器写ts就必须写这样又臭又长的类型声明吗?还是说有其它优雅使用方式,但是我不知道?欢迎拍砖
###typescript 是静态类型检查语言,最后都会被编译成 js,装饰器这种元编程实践方式,对于编译时的 typescript 以及框架的视图编译器再合适不过。
并且 ts 之父也是 C# 之父,借鉴 C#/Java 的注解也是自然而然的,否决了语言的推荐实践,其他hacker 方式来使用这个语言,总是优雅不起来,最好还是接受它的实践方式,顺风而行。
不知道vuex4是什么,但首先作者写了这么详细的类型,为的是帮助你在IDE里使用时可以得到正确的语法提示。如果不喜欢可以直接改成:
export type AppStore = any
新手上路,求赞求赞。