很难描述所以我创建了一个回购: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
中对其进行重新输入,那么我该如何再次对其进行自定义?
答案 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"
中的所有内容实用或可维护。