typescript - 如何从依赖中重新输入接口

时间:2017-10-26 10:24:17

标签: javascript typescript vue.js

很难描述所以我创建了一个回购:https://github.com/galenyuan/how-to-retyping

我想这样做:

import Vue from 'vue'

declare module 'vuex/types/vue' {
  interface Vue {
    $store: number
  }
}

哪个Vue在vue/types/vue中定义,而vuex在vuex/types/vue中对其进行重新输入,那么我该如何再次对其进行自定义?

1 个答案:

答案 0 :(得分:1)

首先,所有模块扩充都必须针对声明正在扩充的实际模块。这可以在vuex扩充本身中观察到。

// vuex/types/vue.d.ts
declare module "vue/types/vue" {
  interface Vue {
    $store: Store<any>;
  }
}

你需要做同样的事情。也就是说,在types/store.d.ts中你会写

export {} // ensure this file is a module

declare module "vue/types/vue" {
  interface Vue {
    $store: Store<any>;
  }
}

这将有效,也就是说它将被视为Vue的增强。不幸的是,我们会立即遇到另一个错误,一个不知道解决方法的错误。

  

后续变量声明必须具有相同的类型。变量'$ store'在'***** / how-to-retyping-master / node_modules / vuex / types / vue.d.ts 15:4中输入'Store'类型,但这里有'number'类型。< / p>

这是声明合并的限制,重叠成员声明冲突。

没有一个好方法,因为导入"vuex"会阻止我们排除它导入的任何内容,这意味着我们无法排除随其附带的扩充。

我们可以使用路径重定向导入"vuex",或者使用环境外部模块声明将其隐藏,但这需要我们重新声明"vuex/types/index.d.ts""vuex/types/helpers.d.ts"中的所有内容实用或可维护。

相关问题