vuex4到底怎么优雅的与typescript结合使用?

新手上路,请多包涵

首先排除装饰器写法,个人偏见,实在不喜欢

然后我看了下网上不不使用装饰器的写法,当用到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就必须写这样又臭又长的类型声明吗?还是说有其它优雅使用方式,但是我不知道?欢迎拍砖

阅读 4.2k
2 个回答

typescript 是静态类型检查语言,最后都会被编译成 js,装饰器这种元编程实践方式,对于编译时的 typescript 以及框架的视图编译器再合适不过。
并且 ts 之父也是 C# 之父,借鉴 C#/Java 的注解也是自然而然的,否决了语言的推荐实践,其他hacker 方式来使用这个语言,总是优雅不起来,最好还是接受它的实践方式,顺风而行。

不知道vuex4是什么,但首先作者写了这么详细的类型,为的是帮助你在IDE里使用时可以得到正确的语法提示。如果不喜欢可以直接改成:

export type AppStore = any

新手上路,求赞求赞。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进