关于vuex:增强Vuex-4x的typescript-类型智能提示与检查

vuex 4.x TS加强

更好的反对智能提醒及TS查看,在不影响已有TS反对的性能状况下, 加强 state, getters 有限层级属性提醒,并反对只读校验; 加强commit、dispache办法感知所有操作类型名称并对载荷参数查看,类型名称反对namespaced配置进行拼接。

装置

$ yarn add vuex-ts-enhanced

应用

import { createStore} from 'vuex'
import { ExCreateStore } from 'vuex-ts-enhanced'

class State {
  count: number = 1
}

export const store = (createStore as ExCreateStore)({
  state: new State()
  ...
})

或者应用笼罩申明形式, 在你的我的项目文件夹中增加一个d.ts文件:

// vuex.d.ts
declare module 'vuex' {
  export { createStore } from 'vuex-ts-enhanced'
}

这样就能够不改变任何原有的Vuex应用办法。

不反对的操作:

  1. 不反对对象形式分法或提交,因为没有限度载荷必须为对象类型;
  2. 不反对在带命名空间的模块注册全局 action,不举荐这种用法;
  3. 不反对动静注册的模块, 须要应用 (store.dispatch as any)('doSomething') 的形式来跳过查看;

不兼容的应用办法 createStore<State>({...})

无需手动指定<State>,默认将会主动从 state 选项中推断;当须要自定义类型时,请应用 class 进行定义并设置初始值,而后在state配置项中创立一个实例;

class State {
  name = ''
  count = 1
  list?:string[] = []
}
const store = createStore({
  state: new State(),
  ...
}

全局类型补充
将 store 装置到 Vue 利用时,会挂载this.$store属性,同时将 store 注入为利用级依赖,在未指定 InjectionKey 时将应用 “store” 作为默认 key, 因而咱们能够在组合式 API 中应用inject('store')来拿到 store 实例,然而却无奈感知返回的数据类型,为此咱们能够应用上面的形式给 store 进行类型补充:

import { store } from '.. /src/store'

interface InjectionMap {
  'store': typeof store
}

declare module '@vue/runtime-core' {

  interface ComponentCustomProperties {
    $store: InjectionMap['store']
  }
  export function inject<S extends keyof InjectionMap>(key:S):InjectionMap[S]
}

github: https://github.com/nicefan/vu…
Vuex PR 反对: https://github.com/vuejs/vuex…

【腾讯云】云产品限时秒杀,爆款1核2G云服务器,首年99元

阿里云限时活动-1核2G-1M带宽-40-100G ,特惠价87.12元/年(原价1234.2元/年,可以直接买3年),速抢

本文由乐趣区整理发布,转载请注明出处,谢谢。

You may also like...

发表评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据