2***@qq.com
2***@qq.com
  • 发布:2024-04-01 10:41
  • 更新:2024-04-01 16:56
  • 阅读:247

【报Bug】HBuilder X从3.99升级到4.07后,之前支持的UTS语句现在报异常。

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: Win10 22H2

HBuilderX类型: 正式

HBuilderX版本号: 4.07

手机系统: 全部

手机厂商: 华为

页面类型: nvue

vue版本: vue3

打包方式: 云端

项目创建方式: HBuilderX

测试过的手机:

全部手机都一样

操作步骤:

BUG描述中

预期结果:

可以正常编辑

实际结果:

无法 正常编辑

bug描述:

升级到4.07之后,类型转换语法报错无法 编辑,
let j1: AnyArray=['sdf',3];
let j2=[123,3] as AnyArray;
let j3=['asdf',234] as Array<any>;
所有这样的写法都UTS会报错,TS不会报错。
还有
<script lang="uts">
export default {
data() {
return {
title: 'Hello',
}
},
onLoad() {
}
}
class Test_Class{
TestName:string
}
</script>
还有这样,在Script标签中添加类也会报错。。。TS不会报错

2024-04-01 10:41 负责人:无 分享
已邀请:
2***@qq.com

2***@qq.com (作者)

看到的兄弟顶上去。

DCloud_UNI_FengXY

DCloud_UNI_FengXY

你说的报错,是只在HBuilderX的编辑器里边波浪线飘红,还是运行到真机编译过不去?

  • 2***@qq.com (作者)

    真机编译不过去。

    2024-04-01 16:21

  • DCloud_UNI_FengXY

    回复 2***@qq.com: 错误信息是什么

    2024-04-01 16:25

  • 2***@qq.com (作者)

    你建 一个最简单最简单的项目 。。

    let dat =[2,23,'234'] as AnyArray;

    let dat =[2,23,'234'] as Array<string>;

    let dat =['2','23','234'] as string[];

    你把这样的代码,写出来,用UTS写,然后你就无法 真机调试了。

    2024-04-01 16:55

  • 2***@qq.com (作者)

    回复 DCloud_UNI_FengXY:

    我在下面把录的视频传上来了。你看下吧。谢谢

    2024-04-01 16:56

  • DCloud_UNI_FengXY

    回复 2***@qq.com: 你是从文档看的AnyArray用法,还是谁告诉你的这个?没有这个类型的

    2024-04-01 17:00

  • 2***@qq.com (作者)

    回复 DCloud_UNI_FengXY:

    亲爱的,在IDE里面试一下AnyArray这个就知道了,

    你说没有这个那这个就不要,你试一下另外两个,另外两个写法应该没问题吧?依然不行

    let dat =[2,23,'234'] as Array<string>;


    let dat =['2','23','234'] as string[];

    甚至 let bo= 'true' as boolean这样的写法都 不行。

    2024-04-02 00:25

  • DCloud_UNI_FengXY

    回复 2***@qq.com: let dat =[2,23,'234'] as Array<string>; 和 let bo= 'true' as boolean; 本来就是不正确的uts写法,以前也不对,你不能把一个混合了数值和字符串的数组,强转成字符串数组,也不能把一个字符串强转成boolean类型,uts是一个强类型语言。

    2024-04-02 11:18

DCloud_UNI_FengXY

DCloud_UNI_FengXY

你 AnyArray 是从哪来的?自己定义的别名?

  • 2***@qq.com (作者)

    亲,这怎么是自己定义的别名呢。这是UTS里面的数据类型啊。

    你试一下,,正常这样写是没有问题的。

    uni.request({

    url: "https://test.text.com/j",

    data:['Parp1','Parp2'],

    success: (d) => {

    let dat = d.data['data']['Table'] as AnyArray;

    }

    })

    2024-04-01 16:25

  • DCloud_UNI_FengXY

    回复 2***@qq.com: 你从哪看到的AnyArray这个用法

    2024-04-01 16:57

  • 2***@qq.com (作者)

    回复 DCloud_UNI_FengXY: 亲啊,你是官方 的技术 人吗?如果是,你就把后面那个AnyArray换成实体的数组,

    纠着这个AnyArray不放。


    4.07的问题,就是只要用 as 这个关键字进行数据类型转换,就会报错。


    获取下来的JSON转换成实体类。总 d.data['data']['Table1'] as ModelClass[]这样叫没有问题吧?这样写总可以了吧?d.data['data']是API访问 下来的JSON,,ModelClass是一个对应的窗体类,只要用as这个关键字进行数据转型转换,就没有办法编译。。。


    如果你是官方 的技术人员,麻烦你试一下我说的语法,就是as这个进行任何数据类型转换,都行,你随便 写,都会报错,,


    如果你不是官方的技术人员,那你不懂就不用再乱回复我了。那你到底懂不懂?,

    我都说了,类型转换就会报错是,下面还有视频说明 。就算你写 let j=2 as number它都要报错,明白 吗?

    2024-04-02 13:14

  • DCloud_UNI_FengXY

    回复 2***@qq.com:

    第一:是你说3.99可以,4.07不可以,所以我要确认为什么你说3.99 AnyArray可以,而 4.07不可以

    第二:所有的uts文档,所有之前的版本,从来没有可以通过as来任意转换类型的用法,可以先看一遍文档:

    https://doc.dcloud.net.cn/uni-app-x/tutorial/codegap.html

    https://doc.dcloud.net.cn/uni-app-x/uts/

    2024-04-02 14:32

  • DCloud_UNI_FengXY

    回复 2***@qq.com: 关于as用法的文档说明:https://doc.dcloud.net.cn/uni-app-x/uts/operator.html#as

    2024-04-02 14:39

  • 2***@qq.com (作者)

    回复 DCloud_UNI_FengXY:

    const a: string = 'a'


    a as any // 正确

    a as string // 正确

    这就是在你们文档里面弄出来的。4.07这个版本,就这样的写法,都无法编辑,明白了没?

    我跟你说的不是任意转换类型,,


    是任何地方,只要使用as这个来转换,就报错,,,我怎么感觉你是机器 人?我视频也录了。示例也说了,如果你是官方 的人技术人员,你不能试一下?

    2024-04-02 16:39

2***@qq.com

2***@qq.com (作者)

错误 提示在附件的视频中,可以看下

  • DCloud_UNI_FengXY

    你的项目是什么类型的?uni-app vue3 ?,<script lang="uts"> 只支持 uni-app x 项目类型的工程

    2024-04-02 14:59

  • 2***@qq.com (作者)

    回复 DCloud_UNI_FengXY:

    NVUE,

    VUE3

    4.07之前全部都 是这样的。现在又成了只支持APP X了。

    2024-04-02 16:40

  • 2***@qq.com (作者)

    4.07前的版本,项目 都 做上线了。。现在升到4.07,整 个项目 无法运行了。


    <script lang="uts">

    export default {

    data() {

    return {

    title: 'Hello',

    Items: uni.getSystemInfoSync().windowHeight.toString()

    }

    },

    onLoad() {

    },

    methods: {


        }  
    }
    class Test_Class{
    TestName:string
    }

    </script>

    这样的写法都会错,必须把下面的类删了才不会错。

    只要在下面加了类的申请 ,就不能编译

    2024-04-02 16:41

  • DCloud_UNI_FengXY

    回复 2***@qq.com: 把lang="uts"改成lang="ts",非 x 只支持 js 和 ts

    2024-04-02 17:01

  • 2***@qq.com (作者)

    回复 DCloud_UNI_FengXY:

    那意思就是以前的项目 NVUE的全部用的UTS的,必须 改成TS?

    2024-04-02 17:31

  • 2***@qq.com (作者)

    回复 DCloud_UNI_FengXY:

    我去,整 个项目 全部都要改。真是服了。

    2024-04-02 17:31

  • DCloud_UNI_FengXY

    回复 2***@qq.com: 你以前写的uts也都是被当成ts,然后编译的时候丢掉类型,非 x 的项目一直没支持过<script lang="uts">

    2024-04-02 17:32

  • 2***@qq.com (作者)

    好吧不纠结这个问题了。

    另外一个问题,IOS的蓝牙打印,总是不规则闪退,多数情况下是因为什么 原因 导致 的呢?

    2024-04-02 17:37

  • DCloud_UNI_FengXY

    回复 2***@qq.com: 可以另外提交一个问题,我转给其他同事跟进

    2024-04-02 17:40

要回复问题请先登录注册