daguaochengtang
V2EX  ›  问与答

难道只有我遇到了这个 bug?

  •  
  •   daguaochengtang · Aug 30, 2021 · 2267 views
    This topic created in 1737 days ago, the information mentioned may be changed or developed.

    问题相关关键词: vue3,vite,ts,vscode

    问题描述及复现步骤:

    yarn create vite启动一个项目,选择vue-ts,在 src 目录下新建一个 index.ts ,在这个文件内import { ref } from 'vue',vscode 会报错提示vue 没有导出的成员 ref。我把这个报错截图了,可以在新标签页打开下面的链接查看。

    http://ww1.sinaimg.cn/large/d7f38664ly1gtywemw1gfj20os08adig.jpg

    补充两点:

    1. 这个报错只是 vscode 编辑器的报错,实际上 ref 是可以被导入的,代码能跑起来。
    2. 上面的import { ref } from 'vue'如果是在.vue 的单文件组件内,则 vscode 不会有报错。

    为什么 vscode 无法在 ts 文件内正确的推导出导出成员呢?我需要怎么操作来解决这个 bug 呢?(可以跟着上面的复现步骤试一下)

    6 replies    2026-05-28 17:00:54 +08:00
    Hanser002
        1
    Hanser002  
       Aug 30, 2021
    因为你没有 yarn? yarn create vite 之后要自己手动装的 找不到声明文件肯定报错啊。。
    daguaochengtang
        2
    daguaochengtang  
    OP
       Aug 31, 2021
    @Hanser002 不是这个原因,我项目都跑起来了,依赖没装的话,项目能跑吗。而且不管是 @vue/cli 还是 vite,现在都是自动安装依赖的
    Hanser002
        3
    Hanser002  
       Aug 31, 2021
    @daguaochengtang
    1. 按照你的复现步骤是没装依赖
    2. vite 不会自己装依赖
    3. 图裂了
    4. 可以尝试检查插件或者声明文件
    stone520
        4
    stone520  
       Feb 22, 2022
    @daguaochengtang 楼主解决了吗
    stone520
        5
    stone520  
       Feb 22, 2022
    发现是我的 vscode 版本太低的原因
    shaoyirobin
        6
    shaoyirobin  
       May 28
    我这边的是若以框架,它自己定义了类似$modal,我为了兼容增加了定义,然后没定义好.少了引入
    解决方案是
    ````
    // 1. 必须要引入原生的 vue ,告诉 TS 我们是在原模块基础上扩展
    import { ComponentCustomProperties } from 'vue'
    declare module '@vue/runtime-core'{
    interface ComponentCustomProperties {
    $modal: {
    /** 消息提示 */
    msg: (content: string) => void
    }}}

    // 3. 必须确保文件内有 export ,哪怕是个空导出,用以触发模块扩展机制
    export {}
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   987 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 19:48 · PVG 03:48 · LAX 12:48 · JFK 15:48
    ♥ Do have faith in what you're doing.