希灵帝国审查官
希灵帝国审查官
  • 发布:2025-05-15 10:40
  • 更新:2025-05-16 14:44
  • 阅读:204

【报Bug】vue3 ts 挂载全局方法,在proxy中ts无法识别挂载的方法并且爆红

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: 10

HBuilderX类型: 正式

HBuilderX版本号: 4.65

手机系统: 全部

手机厂商: 华为

页面类型: vue

vue版本: vue3

打包方式: 云端

项目创建方式: HBuilderX

测试过的手机:

mi15

操作步骤:

.

预期结果:

.

实际结果:

.

bug描述:

vue3 + ts
main.js中挂载全局方法
使用时在proxy中ts无法识别挂载的方法并且爆红

//main.js  
...  
import {Sugar} from '@/common/sugar.ts';  
...  
export function createApp() {  
    const app = createSSRApp(App)  
    // 全局挂载  
    app.config.globalProperties.$Sugar = Sugar  
    install(app)  
    return {  
        app,  
    }  
}
//pages/index.vue  

<script setup lang="ts">  
import { ref, Ref, computed, getCurrentInstance } from 'vue';  
const { proxy } = getCurrentInstance();  
proxy.$Sugar.xxx()  
</script>  

**
此时 $Sugar 没有代码提示,并且会爆红

但是

当你声明了类型文件时,比如
**

//shims-vue.d.ts  

import { ComponentCustomProperties } from '@vue/runtime-core';  
declare module 'vue' {  
    interface ComponentCustomProperties {  
        $Sugar: {  
            xxx: (text: string) => void;      
        };  
    }  
}  
export default ComponentCustomProperties;  

当编译器打开这个文件时候,有代码提示不报错, 关闭这个文件就没有提示并且报错

2025-05-15 10:40 负责人:DCloud_HB_SCZ 分享
已邀请:
希灵帝国审查官

希灵帝国审查官 (作者)

根据文档重新改了。
下面这个Myglobal 是全局声明
$Sugar 还是无法访问

@DCloud_UNI_JBB

import { ComponentCustomProperties } from 'vue';  

declare global {  
    type Myglobal = string;  
}  

declare module 'vue' {  
  interface ComponentCustomProperties {  
    $Sugar: {  
        xxx: (text: string) => void;  

    };  
  }  
}  

export {};  
DCloud_UNI_JBB

DCloud_UNI_JBB

希灵帝国审查官

希灵帝国审查官 (作者)

@DCloud_UNI_JBB

  • 恭喜n发财

    当前项目,4.65直接标准基座运行到红米手机 没有问题哦,loading出来了

    2025-05-15 17:37

  • 恭喜n发财

    你是加了语法提示吗,我没有语法提示

    2025-05-15 17:38

  • 希灵帝国审查官 (作者)

    回复 恭喜n发财: 代码没问题,语法提示没有 和ts爆红 我这按照文档加了 ComponentCustomProperties 类型的补充

    给proxy,但是不好使,正常的全局类型可以识别,扩展全局属性就不行 。 F:/code/RuoYi-App-vue3/model/shims-vue.d.ts


    参考文档链接 https://cn.vuejs.org/guide/typescript/options-api.html#augmenting-global-properties

    2025-05-16 08:25

DCloud_UNI_JBB

DCloud_UNI_JBB

globalProperties上挂载数据仅支持了这种写法(this.)的提示,用户的这种写法没有主动支持提示,至于说的写了声明并打开是因为打开的项目下的文件会被加载到语言服务的上下文中,关闭后就被清理了

  • 困难总比办法多

    setup写法的用户呢(现在新的vue3项目都是setup写法)

    <script setup lang="ts">

    import { onLoad,} from '@dcloudio/uni-app'

    import { getCurrentInstance} from "vue"


    const { proxy } = getCurrentInstance()


    onLoad((options) => {

    proxy.$Sugar

    })

    </script>

    2025-05-16 16:22

要回复问题请先登录注册