莱特米西西
莱特米西西
  • 发布:2022-10-29 22:26
  • 更新:2022-11-14 00:48
  • 阅读:526

【报Bug】uni-app (vue3)编译器对template中的变量推断有问题,Ref<string>无法自动推导为string

分类:HBuilderX

产品分类: HbuilderX

PC开发环境操作系统: Mac

PC开发环境操作系统版本号: MacOS Monterey 12.2.1 (21D62)

HBuilderX版本号: 3.6.4

示例代码:
<template>  
<view class="jia" :id="abc"></view>  
</template>  
<script lang="ts" setup>  
    import {  
        ref,  
    } from 'vue'  
    const abc = ref("1");  
</script>

操作步骤:

安装vue3插件

预期结果:

template中的变量abc应该推导出string类型

实际结果:

template中的变量abc为Ref<string>类型

bug描述:

HBuilder的vue3插件似乎不太完善,模板里面对Ref类型的解包没有生效。

正常来说在<script lang="ts" setup>中声明一个Ref变量,例如const abc = ref("1");// 类型是Ref<string>
在模板里面使用变量abc得到的类型提示应该是string,而HBuilder里提示的还是Ref;

2022-10-29 22:26 负责人:DCloud_HB_WDL 分享
已邀请:
莱特米西西

莱特米西西 (作者)

补充,需要开启ts校验

莱特米西西

莱特米西西 (作者)

非常感谢大家的关注,特别感谢 DCloud_HB_WDL,经过详细排查,我们发现此问题只有我的电脑上能复现,后经过确认认定是yarn workspace存在的问题,而不是HbuilderX本身的问题。

具体的原因是这样子的,我把小程序项目放在一个yarn workspace当中,目录结构大致如:

父级项目  

  --  HbuilderX 创建的小程序项目  

  --  用vue+ts创建的管理页面项目  

  --  Node.js后端接口项目

而问题在于小程序项目内的vue版本与管理页面项目的vue版本不一致。而yarn workspace会提取部分公共的依赖到父级项目当中。因此小程序中的类型文件既有来自本身node_modules中的vue ts声明文件,又有来自父级项目的另一个版本的vue的ts声明文件,两个声明文件在对于unique symbol的declare产生了冲突,导致无法正常的进行UnwrapRef解包。

最开始我的小程序的通过HbuilderX创建的免node项目,vue依赖使用的是编译器内部的版本,所以死活找不到问题,后续我将项目转化为cli创建的项目时详细排插才发现问题。

解决方式:

将yarn workspace中所有vue项目的vue的版本和uinapp小程序中的vue版本保持一致。然后删除所有的node_modules再重新执行yarn安装依赖。

例如我这里选的是3.2.45。

建议此问题标为已解决

该问题目前已经被锁定, 无法添加新回复