Vue3+TS+ElementPlus报错集锦

news2024/11/15 23:17:54

目录

1、导入TS类型报错

2、使用类型报错

3、Vue3引入文件爆红且不提示

4、为defineAsyncComponent引入的component子组件设置类型

5、类型“undefined”不能作为索引类型使用。

6、为props定义类型报错

7、在tsx中调用表单验证方法报错

 8、为defineComponent中的props选项标注类型


1、导入TS类型报错

(1)报错信息

import type { FormInstance, FormRules } from 'element-plus'
模块 ""element-plus"" 没有导出的成员 "FormInstance"。你是想改用 "import FormInstance from "element-plus"" 吗?

(2)修复方式

 // env.d.ts中
 
// TODO: TS 无法主动发现模块,如果找不到模块,则需要在此使用 declare module 进行配置
declare module 'element-plus/dist/locale/zh-cn.mjs'
declare module 'element-plus/dist/locale/en.mjs'
declare module 'element-plus'

2、使用类型报错

(1)报错信息

不能将命名空间“FormInstance”用作类型。

不能将命名空间“FormRules”用作类型。

import type { FormInstance, FormRules } from 'element-plus'
 
// 这里的类型在使用的时候需要注意
const ruleFormRef = ref<FormInstance>()
 
const rules = reactive<FormRules>({
    userName: [
        { required: true, message: '请输入用户名', trigger: 'blur' },
        { min: 6, max: 11, message: '长度需要再6-11位', trigger: 'blur' }
    ],
    password: [
        { required: true, message: '请输入密码', trigger: 'blur' },
        { min: 6, max: 11, message: '长度需要再6-11位', trigger: 'blur' }
    ]
})
// 提交
const submitForm = async (formEl: FormInstance | undefined) => {
  if (!formEl) return
  await formEl.validate((valid:any, fields:any) => {
    if (valid) {
     consolee.log('success submit!')
    } else {
      console.log('error submit!', fields)
    }
  })
}

const resetForm = (formEl: FormInstance | undefined) => {
  if (!formEl) return
  formEl.resetFields()
}

 (2)修复方式1

import type { FormInstance, FormRules } from 'element-plus'
 
// 这里的类型在使用的时候需要注意
const ruleFormRef = ref<InstanceType<typeof FormInstance>>()
 
const rules = reactive<InstanceType<typeof FormRules>>({
    userName: [
        { required: true, message: '请输入用户名', trigger: 'blur' },
        { min: 6, max: 11, message: '长度需要再6-11位', trigger: 'blur' }
    ],
    password: [
        { required: true, message: '请输入密码', trigger: 'blur' },
        { min: 6, max: 11, message: '长度需要再6-11位', trigger: 'blur' }
    ]
})
// 提交
const submitForm = async (formEl:InstanceType<typeof FormInstance>| undefined) => {
  if (!formEl) return
  await formEl.validate((valid:any, fields:any) => {
    if (valid) {
     console.log('success submit!')
    } else {
      console.log('error submit!', fields)
    }
  })
}
const resetForm = (formEl:InstanceType<typeof FormInstance>| undefined) => {
  if (!formEl) return
  formEl.resetFields()
 
}

 (3)修复方式2

import type { ElForm } from 'element-plus'
 
 
type FormInstance = InstanceType<typeof ElForm>
type FormRules = InstanceType<typeof ElForm>
 
 
// 这里的类型在使用的时候需要注意
const ruleFormRef = ref<FormInstance>()
 
const rules = reactive<FormRules>({
    userName: [
        { required: true, message: '请输入用户名', trigger: 'blur' },
        { min: 6, max: 11, message: '长度需要再6-11位', trigger: 'blur' }
    ],
    password: [
        { required: true, message: '请输入密码', trigger: 'blur' },
        { min: 6, max: 11, message: '长度需要再6-11位', trigger: 'blur' }
    ]
})

4)修复方式3——仅针对ref获取组件实例

如果组件的具体类型无法获得,或者你并不关心组件的具体类型,那么可以使用 ComponentPublicInstance。这只会包含所有组件都共享的属性,比如 $el。 

import { type ComponentPublicInstance, ref } from 'vue'
const ruleFormRef = ref<ComponentPublicInstance>()

3、Vue3引入文件爆红且不提示

(1)报错信息

找不到模块“../views/Demo.vue”或其相应的类型声明。ts(2307)

(2)解决方式1

在项目下env.d.ts添加以下代码

// 引入文件爆红且不提示的处理
declare module '*.vue' {
    import { DefineComponent } from 'vue'
    // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/ban-types
    const component: DefineComponent<{}, {}, any>
    export default component
}

(3)解决方式2

安装插件:TypeScript Vue Plugin (Volar) - Visual Studio Marketplace

需要注意的是,Vue3结合TS开发,一共需要安装的volar插件是两个,除了上边写的还有插件:Vue Language Features (Volar) - Visual Studio Marketplace 

4、为defineAsyncComponent引入的component子组件设置类型

(1)报错信息

不能将类型“.......”分配给类型“ComponentProps<DefineComponent<__VLS_TypePropsToRuntimeProps......

 (2)解决方式

const TestComp = defineAsyncComponent(
    (): Promise<Component> => import('@/components/MenuPolymorphism/MenuPolymorphismIndex.vue')
)

5、类型“undefined”不能作为索引类型使用。

(1)报错信息

(2)修复方式

<script setup lang="ts">
import type { RouteMenuConf } from '@/views/DemoConfig'
import IconCommunity from '@/components/icons/IconCommunity.vue'
 
// 定义接口
interface iconsEnum {
    IconCommunity: string
}
const icons = {
    IconCommunity
}
</script>
 
<template>
    // ......
    <component :is="icons[item.iconComp as keyof iconsEnum]" />
</template>
</template>

6、为props定义类型报错

(1)报错信息

模块的默认导出具有或正在使用专用名称“Props”

 (2)修复方式一(为interface添加导出) 

export interface Props {
    userName: string
}
 
const parentData = withDefaults(defineProps<Props>(), {
    userName: '法外狂徒-张三'
})

(3)修复方式二(使用type定义类型)

type Props = {
    userName: string
}
 
const parentData = withDefaults(defineProps<Props>(), {
    userName: '法外狂徒-张三'
})

(4)修复方式三

const parentData = withDefaults(
    defineProps<{
        userName: string
    }>(),
    {
        userName: '法外狂徒-张三'
    }
)

7、在tsx中调用表单验证方法报错

(1)报错信息

Uncaught (in promise) TypeError: formRef.validate is not a function

(2)解决方式

原因是在代码中定义的const formRef = ref() 在使用的时候没有自动解包,需要加上.value才行,而我恰恰忘记了...

 8、为defineComponent中的props选项标注类型

(1)报错信息

'FormConfig' only refers to a type, but is being used as a value here.ts(2693)

(2)解决方式 

// 错误代码
props: {
    formData: Object,
    formConfig: FormConfig,
    watcherFun: Function
},
 
 
// 正确代码
props: {
    formData: Object,
    formConfig: Object as PropType<FormConfig>, // defineComponent标注类型比较特殊
    watcherFun: Function
},

 参考原文:Vue3+TS+ElementPlus报错集锦_你吃香蕉吗?的博客-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/707955.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

1_5 Occupancy network

1、BEVerse: Unified Perception and Prediction in Birds-Eye-View for Vision-Centric Autonomous Driving 本文不想已经存在的单一任务优化方法&#xff0c;而是构建BEV的时空视频特征并联合推断视觉自动驾驶多任务。之前的任务是目标检测和地图语义分割一起做&#xff0c;之…

量子力学的起源和基本概念

亲爱的读者&#xff0c; 欢迎回到我们的量子力学系列文章。在我们的第一篇文章中&#xff0c;我们进行了量子力学的总体介绍。今天&#xff0c;我们将深入探讨量子力学的起源和一些基本概念。 量子力学的起源可以追溯到20世纪初&#xff0c;当时的科学家们遇到了一些古典物理…

stm32 + w25qxx + EasyFlash

一&#xff0c;软件介绍 EasyFlash 是一款开源的轻量级嵌入式Flash存储器库&#xff0c;方便实现基于Flash存储器的常见应用开发。适合智能家居、可穿戴、工控、医疗等需要断电存储功能的产品&#xff0c;资源占用低&#xff0c;支持各种 MCU 片上存储器。 [1] 该库目前提供…

CrossOver软件Mac2023下载安装教程

CrossOver是一款可以让Mac和Linux系统中正常运行Windows软件的应用程序。它不像虚拟机一样需要安装Windows系统之后才可以安装Windows的应用程序&#xff0c;这一方式给大多数用户带来了方便。通过CrossOver实现跨平台的文件复制粘贴&#xff0c;使Mac/Linux系统与Windows应用良…

数字图像处理1-概述

目录 一、数字图像与数字图像处理 1. 基本概念 1.1 处理方法通常有: 1.2 图像处理的基本特征∶ 2. 图像处理与图像分析的关系 3. 数字图像处理的优点 二、数字图像处理系统组成及研究内容 1.数字图像处理系统的组成 1.1 基本图象处理系统的结构 1.2 图像输入设备 1.3 扫描仪分…

leetcode 26.删除有序数组中的重复项

⭐️ 题目描述 &#x1f31f; leetcode链接&#xff1a;删除有序数组中的重复项 代码&#xff1a; /*思路&#xff1a;双指针问题[1,1,2]src-> [ 1 , 1 , 2 ]destnums[src] nums[dest] > src;src-> [ 1 , 1 , 2 ]destnums[src]…

volatile和-O3测试

一个延时函数&#xff1a; #include <stdio.h> #include <stdlib.h> #include <time.h> void delay(){int i 0;int j 0;for(i 0;i < 50000;i){for(j 0;j < 50000;j);} }int main(int argc, char **argv){printf("time %ld\n",time(NUL…

碳排放预测模型 | Python实现基于机器学习的碳排放预测模型(模型对比)

文章目录 效果一览文章概述源码设计参考资料效果一览 文章概述 碳排放预测模型 | Python实现基于机器学习的碳排放预测模型(模型对比) 碳排放被认为是全球变暖的最主要原因之一。 该项目旨在提供各国碳排放未来趋势的概述以及未来十年的全球趋势预测。 其方法是分析这些国家各…

供应链管理-亿发供应链计划管理系统,赋能中小型制造企业信息化

供应链管理是现代企业成功的关键因素。中小型制造企业可以通过建立有效的供应链管理系统实现成本控制、增加交付速度、增强灵活度&#xff0c;增加客户满意度。供应链管理系统&#xff0c;利用物联网技术工具来实现中小型企业供应链自动化和优化。减少人为错误&#xff0c;增加…

30_小驰私房菜_qcom根据关键日志信息,快速排查问题

根据关键日志信息,能帮忙我们快速的定位和分析问题。是一项必须得掌握的技能。 一、查看当前是哪个app调用的相机 logcat 关键字“CameraService::connect” 如下面日志打印所示,我们还可以看到是调用的Camera API 1还是Camera API 2. 二、查看配流情况 1) qcom 平台 …

多元回归预测 | Matlab基于粒子群算法(PSO)优化混合核极限学习机HKELM回归预测, PSO-HKELM数据回归预测,多变量输入模型

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 多元回归预测 | Matlab基于粒子群算法(PSO)优化混合核极限学习机HKELM回归预测, PSO-HKELM数据回归预测,多变量输入模型 评价指标包括:MAE、RMSE和R2等,代码质量极高,方便学习和替换数据。要求2018版本及以上。…

Update module V1 V2

原文&#xff1a; https://www.cnblogs.com/helileng/archive/2010/10/15/1852237.html 这是讲RFC V1 V2最清楚的一个帖子了 SAP中V1和V2的区别及各功能 SAP的进程种类分&#xff1a;前台进程、后台进程、打印进程、更新进程、队列进程 其中更新进程分两种&#xff0c;V1和V2…

【2022吴恩达机器学习课程视频翻译笔记】2.4无监督学习-part-1

B站上面那个翻译我有点看不懂&#xff0c;打算自己啃英文翻译了&#xff08;有自己意译的部分&#xff09;&#xff0c;然后懒得做字幕&#xff0c;就丢在博客上面了&#xff0c;2.2之前的章节结合那个机翻字幕能看懂 2.4无监督学习-part-1 After supervised learning, the m…

springboot项目外卖管理 day09-mysql主从复制以及nginx入门

文章目录 一、读写分离问题分析MySQL主从复制介绍 配置配置主库&#xff0c;我这里就用虚拟机上的mysql当主库了配置从库&#xff0c;我这里就用我的另一台克隆的虚拟机了 读写分离案例背景Sharding-JDBC介绍项目实现读写分离 二、Nginx简介Nginx的下载和安装安装过程&#xff…

物联网芯片

1、当前我的个人开源库基于STM32F103&#xff0c;开发环境基于Keil&#xff0c;操作系统基于FreeRTOS V9.0 2、基于官方标准固件库V3.5基础上开发的BSP驱动外设库。 3、当前完成的有BKP_BSP、DMA_BSP、EXTI_BSP、FSMC_BSP、GPIO_BSP、IWDG_BSP、I2C_BSP、RTC_BSP、SPI_BSP、U…

Postgresql源码(108)不同类型insert在parse阶段的差异分析

0 概述 分析三种类型的insert在parse的各个阶段的差异&#xff1a; insert into TAB_IS SELECT * FROM STUDENT a WHERE a.sno > ANY (SELECT b.sno from STUDENT b); insert into TAB_IS values(10, AAA); insert into TAB_IS values(20, CCC),(30, DDD),(40, EEE);不同i…

代码随想录再战day4

24 两两交换链表的节点 力扣 思路&#xff1a; 还是看了carl哥的视频讲解才写出来。有点难搞 首先 还是老样子 需要一个dummyhead虚拟头节点。 然后核心就是 我们要操作后面两个节点的时候 一定要移动到 这两个节点的上一个节点。 &#xff08;来自代码随想录&#xff09; 然后…

EasyFlash在GD32F303CC上面的移植

记录学习的过程&#xff0c;如果在GD32F303CC上面移植EasyFlash。关于EasyFlash的相关介绍和源码&#xff0c;请参考&#xff1a;https://gitee.com/Armink/EasyFlash 或者 https://github.com/armink/EasyFlash 主要记录移植过程中需要注意的点&#xff0c;移植还是比较简单的…

6.6 极重要的复习,权限与指令间的关系

权限对于使用者账号很重要&#xff0c;因为他可以限制使用者能不能读取/创建/删除/修改文件或目录。 一、让使用者能进入某目录成为“可工作目录”的基本权限为何&#xff1a; 可使用的指令&#xff1a;例如 cd 等变换工作目录的指令&#xff1b; 目录所需权限&#xff1a;使…

liunx安装git

liunx安装git &#xff1a; 提示&#xff1a;记录自己装git 过程 执行下边命令安装 yum -y install git 安装完查看是否安装成功 git --version安装路径默认在/usr/libexe 愉快开始使用git