求助uni-app x 类型定义不匹配,试过很多写法都不行
背景,代码片段节选,如果情况2所有行注释,情况1生效,结果正确✅
如果情况1所有行注释,情况2生效,结果在安卓端运行报错:代码中console.log位置日志如下
12:15:44.351 App Launch at App.uvue:5
12:15:44.351 App Show at App.uvue:8
12:15:44.351 -----1类型this.tableData: object at pages/myInfo/myInfo.uvue:81
12:15:44.351 -----2类型json2: string at pages/myInfo/myInfo.uvue:85
12:15:44.351 -----3类型this.tableData: string at pages/myInfo/myInfo.uvue:87
12:15:44.351 -----4this.tableData: "[ { \"name\": \"名字1\", \"accountnum\": \"1111111\" },{ \"name\": \"名字2\", \"accountnum\": \"2222222\" } ]" at pages/myInfo/myInfo.uvue:88
12:15:45.171 获取数据失败: [java.lang.NullPointerException] {cause: null, message: "null cannot be cast to non-null type io.dcloud.uts.UTSArray<uni.UNI3CDFEA6.objType>"} at pages/myInfo/myInfo.uvue:93
12:15:45.171 应用启动到触发onLaunch耗时: 232ms
12:15:45.172 进入页面:/pages/myInfo/myInfo 。[{"创建dom元素个数":"12个","耗时":"6ms"},{"排版":"1次","耗时":"10ms"},{"渲染":"1次","耗时":"21ms"},{"跳转页面到onReady总耗时":"198ms"}]
试过其他帖子回复的方法也不行:*已解决,先转字符串,再转类型
this.purchaseOrderList = JSON.parse<PurchaseOrderType[]>(JSON.stringify(res['data'])) *
主要代码摘选:
<template>
<view class="content">
<view class="uni-container">
<scroll-view scroll-y class="table">
<view class="table-header">
<text class="header-cell">账号</text>
<text class="header-cell">名称</text>
</view>
<list-view>
<list-item class="table-row" v-for="(item, index) in tableData" :key="index">
<text class="item">{{ item.accountnum }}</text>
<text class="item">{{ item.name }}</text>
</list-item>
</list-view>
</scroll-view>
</view>
</template>
<script>
type objType = {
accountnum : string,
name : string
}
export default {
data() {
return {
情况1: tableData: [] as objType[] ,
情况2: // tableData:[ { "name": "名字1", "accountnum": "1111111" },{ "name": "名字2", "accountnum": "2222222" } ] as objType[] , // 修复类型定义
loading: false
};
},
onLoad() {
this.getData(1) ;
},
methods: {
async getData(pageCurrent:number) {
try {
情况1: console.log('-----1类型this.tableData:',typeof this.tableData);
情况1: this.loading = true;
情况1: this.pageCurrent = pageCurrent;
情况1: const json2 = '[ { "name": "名字1", "accountnum": "1111111" },{ "name": "名字2", "accountnum": "2222222" } ]';
情况1: console.log('-----2类型json2:',typeof json2);
情况1: const json3 = JSON.stringify(json2);
情况1: console.log('-----3类型this.tableData:',typeof json3);
情况1: console.log('-----4this.tableData:',json3);
情况1: this.tableData = JSON.parse<objType[]>(json3) as objType[] ;
this.loading = false;
} catch (error) {
//TODO handle the exception
console.error('获取数据失败:', error);
this.loading = false;
}
}
}
};
</script>

总结下来问题就是,应该是数据类型不匹配的问题, 只要启用了情况2行的代码,在安卓端运行报错22:03:58.683 获取数据失败: [java.lang.NullPointerException] {cause: null, message: "null cannot be cast to non-null type io.dcloud.uts.UTSArray<uni.UNI3CDFEA6.objType>"} at pages/myInfo/myInfo.uvue:94
这边代码生效没问题才能替换代码,从数据库取数据。 截图能显示出来是因为代码是在data() {
return 给的默认值。 不知道咋能转成一样的。