typescript - 扩展或覆盖 vuex 存储的类型定义

标签 typescript vue.js vuex

我在我的应用程序中使用 Vuex 进行状态管理,并且还使用 TypeScript,理想情况下我希望能够引用商店的强类型版本,而不仅仅是状态为“任意”的默认版本等...我知道如何“扩展”类型定义以添加例如新属性,但我正在努力找出一种方法(如果可能)在默认存储上“强制”强类型存储定义。我只是收到错误消息,说后续定义必须具有相同的类型,我想这是可以理解的,但我很懒,想要一些智能感知! ;-)

我读过的大多数文档都说不可能覆盖类型定义文件中已经定义的类型,并且您只能添加其他属性,例如,但是有什么办法可以实现我想要的功能吗?方式还是其他方式?否则我将不得不记住我的方法/操作等的所有名称。

最佳答案

虽然您无法重新定义现有属性,但您可以将 $store 属性的类型化版本定义为非类型化版本的别名:

import Vue from 'vue'
import * as Vuex from 'vuex'

declare module "vue/types/vue" {
    interface Vue {
        $typedStore: Vuex.Store<{
            count: number
        }>;
    }
}

Object.defineProperty(Vue.prototype, "$storeTyped", {
    get: function(this: Vue) {
        return this.$store;
    }
})


const App = new Vue({
    computed: {
        counter: function (this: Vue) {
            return this.$storeTyped.state.count; // Works and is typed
        }
    },
    // Other stuff
});

关于typescript - 扩展或覆盖 vuex 存储的类型定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48734975/

相关文章:

javascript - 如何在模块 vuex js store 中设置全局突变

node.js - 如何在 ASP.Net Core Web 项目中从 TypeScript 引用 Node 模块

angular - 使用 MatMenuTrigger 上的 ViewChild 以编程方式打开 Angular Material 菜单

typescript - 获取传递给 typescript 的泛型参数的类名

css - 更改 Angular 输入占位符文本大小?

javascript - WebSocket 不是用 NuxtJS 定义的

vue.js - 在vue中处理axios请求返回的认证页面

javascript - Vue 3 <router-view> 在使用历史模式构建后得到评论

javascript - spread syntax (...) 究竟如何与 mapGetters 一起工作?

javascript - 使用 Jest 测试 NUXT.js 和 Vue.js 应用程序。获取 '[vuex] module namespace not found in mapState()' 和 '[vuex] unknown action type'