【问题标题】:Vue 2.5 vue-class-component uses Vue namespace but it's a TypeVue 2.5 vue-class-component 使用 Vue 命名空间,但它是一个类型
【发布时间】:2018-04-06 12:26:17
【问题描述】:

将我使用 vue-class-component 的 Vue 2.0 Typescript 项目升级到 Vue 2.5 后,我在声明文件中收到以下错误:

ERROR in /myproject/node_modules/vue-class-component/lib/declarations.d.ts

(6,33): error TS2702: 'Vue' only refers to a type, 
but is being used as a namespace here.

确实,declaration.d.ts 似乎使用Vue 作为命名空间:

options: Vue.ComponentOptions<Vue>

但是我该如何解决这个问题?这是vue-class-component 的声明文件中的疏忽/故障吗?

整个声明文件:

import Vue from 'vue';
export declare type VueClass = {
    new (): Vue;
} & typeof Vue;
export declare type DecoratedClass = VueClass & {
    __decorators__?: ((options: Vue.ComponentOptions<Vue>) => void)[];
};

【问题讨论】:

    标签: typescript vue.js


    【解决方案1】:

    Vue 的声明文件最近更新了,因此请确保 vue-class-componentvue 都是最新的。由于更新,您可能必须通过以下方式引用类型:

    import Vue, * as VueTypes from "vue"
    
    let x: VueTypes.ComponentOptions<any>;
    

    【讨论】:

    • 我确实更新了所有软件包。我通过仅导入选项找到了类似的解决方案。
    • 当我使用npm update vue-class-component 甚至install 更新软件包时,我没有从github 获得最新版本:github.com/vuejs/vue-class-component/blob/master/src/… github 版本似乎已经更新。是否需要其他步骤?
    【解决方案2】:

    我通过显式导入组件选项来修复它,这似乎有效:

    import Vue from 'vue';
    import {ComponentOptions} from 'vue'
    
    let options : ComponentOptions<Vue>;
    

    【讨论】:

    • 我不确定我是否遵循 - 您在哪里应用了此更改?在 vue-class-component 的 declaration.d.ts?这对我来说没有意义 - 即它可能在本地工作,但对于 PaaS 部署(如 heroku 或类似),我需要运行一些部署后脚本(说实话很臭)
    • 正如先前评论所要求的:您在哪里应用了此更改?!我有同样的问题,我不知道把这个sn-p放在哪里。如果我将它直接放在declaration.d.ts 中,我会收到一个新错误:error TS1046: A 'declare' modifier is required for a top level declaration in a .d.ts 文件
    • 它在我的 vue SFC 组件中(例如,helloworld.vue):&lt;script lang="ts"&gt;import Vue, { ComponentOptions } from 'vue'我最近没有遇到这个错误,可能是因为我现在使用vue-class-component 或者 Vue 更新了他们的打字文件?
    猜你喜欢
    • 2021-07-03
    • 1970-01-01
    • 1970-01-01
    • 2019-10-20
    • 2020-01-14
    • 2019-01-18
    • 2018-09-23
    • 2020-03-10
    • 2021-05-31
    相关资源
    最近更新 更多