【问题标题】:TypeScript Vuex Plugin "incompatible types"TypeScript Vuex 插件“不兼容的类型”
【发布时间】:2018-04-12 09:57:31
【问题描述】:

使用 TypeScript 为 vuex 商店创建 vuex 插件时遇到问题。该插件利用高阶函数来获取参数,如下所示:

插件.ts

export const ParamsPlugin = 
       () => {
            (store: Store<RootState>) => {
                console.log("ParamsPlugin");
            } 
        }

索引.ts

const store :StoreOptions<RootState> = {
    state: <RootState> {
      ...
    },
    mutations: {
      ...
    },
    modules: {
      ...
    },
     plugins:  [ ParamsPlugin() ]
  }

打字稿错误:

属性“插件”的类型不兼容。类型 'void[]' 不是 可分配给类型 'Plugin[] |不明确的'。类型 'void[]' 不是 可分配给类型“插件 []”。类型“void”不可分配给类型 '插件'。

我意识到这是一个 TypeScript 问题,并且是 TypeScript 的新手。如果知道解决此问题的最佳方法,那就太好了。

【问题讨论】:

    标签: typescript vuex


    【解决方案1】:

    好吧,您的ParamsPlugin 是一个不返回任何内容的函数(() =&gt; void),所以,当您执行ParamsPlugin() 时,您基本上拥有void。 TypeScript 期望 plugins 数组具有 Plugin 类型的对象,而不是 void

    虽然我不知道Plugin 是什么,但如果你去掉括号,它可能会起作用:

    export const ParamsPlugin = 
       () => (store: Store<RootState>) => {
                console.log("ParamsPlugin");
             } 
    

    使用箭头函数时,如果使用括号,则必须使用return 来返回某些内容。只有在 =&gt; 之后放置一个表达式而不是代码块时,返回才是隐式的。

    现在,ParamsPlugin() 返回 (Store&lt;RootState&gt;) =&gt; void 而不仅仅是 void

    希望对你有帮助

    【讨论】:

    • 非常感谢您的解释。这解决了我的问题。
    猜你喜欢
    • 2020-06-30
    • 1970-01-01
    • 2022-01-22
    • 2020-12-11
    • 2019-09-06
    • 2018-07-29
    • 2019-09-18
    • 1970-01-01
    • 2021-10-06
    相关资源
    最近更新 更多