本文主要是介绍TypeScript类型检查错误 error TS2339,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
错误产生
上一篇博客写了一个调用摄像头的 demo
,用了 vue3
+ vite
,使用了 TypeScript
,代码大致如下:
<script setup lang="ts">
import { onMounted, ref } from 'vue';
import WelcomeItem from './WelcomeItem.vue'
import ToolingIcon from './icons/IconTooling.vue'
import axios from 'axios';
import { ACCESS_TOKEN } from '../config/constants';const devices = ref([]);const fetchDevices = async () => {try {const response = await axios.post(`https://open.ys7.com/api/lapp/device/list?accessToken=${ACCESS_TOKEN}&pageStart=0&pageSize=40`);if (response.status === 200) {devices.value = response.data.data;console.log(response.data)} else {console.error('Failed to fetch devices:', response.statusText);}} catch (error) {console.error('Error fetching devices:', error);}
};onMounted(() => {fetchDevices();
});</script>
<template><WelcomeItem v-for="(device) in devices" :key="device.id"><template #icon><ToolingIcon /></template><template #heading>{{ device.deviceName }}</template> <a :href="'/player/?id=' + device.deviceSerial + '&template=pcRec'" target="_blank">回放</a><a :href="'/player/?id=' + device.deviceSerial + '&template=pcLive'" target="_blank">直播</a></WelcomeItem>
</template>
在开发环境运行是没有问题的,但如果使用,npm run build
(配置为类型检查,即 run-p type-check \"build-only {@}
)时,出现如下错误:
transforming (397) node_modules\axios\lib\platform\browser\classes\URLSearchParams.jssrc/components/ThePlayList.vue:31:59 - error TS2339: Property 'id' does not exist on type 'never'.31 <WelcomeItem v-for="(device) in devices" :key="device.id">~~src/components/ThePlayList.vue:35:34 - error TS2339: Property 'deviceName' does not exist on type 'never'.35 <template #heading>{{ device.deviceName }}</template>~~~~~~~~~~src/components/ThePlayList.vue:36:39 - error TS2339: Property 'deviceSerial' does not exist on type 'never'.36 <a :href="'/player/?id=' + device.deviceSerial + '&template=pcRec'" target="_blank">回放</a>~~~~~~~~~~~~src/components/ThePlayList.vue:37:39 - error TS2339: Property 'deviceSerial' does not exist on type 'never'.37 <a :href="'/player/?id=' + device.deviceSerial + '&template=pcLive'" target="_blank">直播</a>~~~~~~~~~~~~Found 4 errors.ERROR: "type-check" exited with 2.
解决办法
1. 不做类型检查
这是简单粗暴的办法,也是鸵鸟策略,不检查直接生成不就行了。
npm run build-only
也就是 vite build
,能正确生成。
2. 按照出错的问题修改
忽略掉总是不好,那么,可以修改出错的地方,这里主要是 AJAX 返回的 devices
的类型问题,因为是 JSON
返回,可以考虑为 any
类型,于是进行了局部的修改:
const devices = ref<any>([]);
再次执行含 type-check
的生成命令
npm run build
错误提示消失。
这篇关于TypeScript类型检查错误 error TS2339的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!