VSCode开发Vue3+TS项目中遇到各种波浪线(诊断信息)

一、问题汇总

        在使用Visual Studio Code(VSCode)开发Vue3 + TypeScript项目时,会遇到各种波浪线错误(诊断信息),这些问题或错误通常由以下几人原因引起的:

1.1 常见问题

1、typeScript配置问题

  • 确保tsconfig.json文件配置正确,这上配置文件告诉TypeSript编译如何处理项目中的.ts攻.tsx文件。
  • 检查是否包含了正确的模块解析、编译顺选项等。

2、ESLint配置问题

  • ESLint用于代码质量和风格检查,如果项目中使用了ESlint,则需要确保 .eslintrc.js 或 eslintrc.json 文件配置正确。
  • 另外项目是Vue3 + TypeScript,则需要安装并配置相应的ESLint插件,如 @vue/eslint-config-typescipt、@typescript-eslnt/eslint-plugin 和@typescript-eslint/parser。一般使用Vue3脚手架安装,会在初始化选项中选择配置。
  • 在ESlint配置中,确保parserOptions包含了{"parser": "@typescript-eslint/parser", "ecmaVersion": 2020, "sourceType": "module"} 等正确选择。

3、Vetur或Volar插件问题

  • 对于Vue项目,VSCode社区提供了两个流行的插件:Vetur和Volar。Vetur早期更受欢迎,但Volar提供了对Vue3和TypeScript的更好支持。
  • 如果使用了Vetur,遇到了TypeScript相关的问题,考虑切换到Volar。
  • 确保您的插件是最新的,并且已正确安装,并处于开启状态。

4、项目依赖问题

  • 确保项目依赖是最新的,特别是与Vue3和TypeScript相关的依赖包。
  • 使用npm install 、 pnpm 或 yarn来安装所有依赖。这里推荐使用pnpm,其安装更快速。

5、第三方插件问题

  • 确保您使用的第三方插件,是在Vue3 + TypeScript版本环境中完全适应的,有些第三方插件可能几年未更新,并不适合在Vue3+TS环境中运行,可能会导致各种未知的错误。

6、重启VSCode

  • 有时候,可能项目较大或VSCode运行较久,导致一些未知问题,可以通过重启来解决。

1.2 解决问题

1、检查错误类型

  • 仔细阅读VSCode中显示的错误或警告信息,这样可以帮助我们更快的定位到问题
  • 可以将鼠标悬浮在波浪线上,获取更多信息,如“查看问题(Alt+8)”,或“快速修复”等。

2、搜索解决问题

  • 利用互联网搜索具体的错误消息或错误代码,有可能会与其他开发者遇到雷同或相同的问题。
  • 使用ChatGPT或文心一言等大模型,对问题进行分析和搜索解决方案。

二、declare关键字

        在Vue3 + TypeScript的项目中,使用declare关键字来定义类型时,是为了告诉TypeScript编译器关于一些外部资源(如全局变量、模块扩展等)的类型信息。使用declare定义的类型通常不会直接影响组件内部或模块内部的具体实现,但可以影响TypeScript的类型检查过程。

        当代码中某些变量或方法相关的波浪线消失了,这意味着通过定义的declare提供了足够的类型信息,让TypeScript能够理解并接受当前的用法。

2.1 创建类型目录

        通常我们是在项目src目录下,创建一个types文件夹,用来创建和定义项目中需要的类型信息。通过在一个 .d.ts(声明文件)文件中声明相关类型来解决问题。

2.2 tsconfig.app.json配置

        在创建types文件夹后,需要在tsconfig.app.json中配置下,告诉Typescript编译器类型查询位置,添加typeRoots配置项,代码如下:

{"extends": "@vue/tsconfig/tsconfig.dom.json","include": ["env.d.ts", "src/**/*", "src/**/*.vue"],"exclude": ["src/**/__tests__/*"],"compilerOptions": {"composite": true,"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo","typeRoots": ["./src/types"],"baseUrl": ".","paths": {"@/*": ["./src/*"]}}
}

2.3 注意事项

  • 声明文件的位置:通常是将声明文件放置在项目src/types目录下,但这不是强制的。TypeScript会查找项目根目录和node-modules/@types下的声明文件。
  • 全局作用域:使用declare声明的类型或变量是全局的,它们对项目中所有使用TypeScript的地方可见。
  • 模块扩展:如果使用了Vuex或Vue Router,可能需要使用 declare module语法来扩展该模块的类型定义。
  • 类型安全:虽然declare可以帮助我们绕开TypeScript的类型检查,但这不会为项目提供运行时安全。确保声明与运行时行为相匹配,以免导致运行时出错。

三、常见问题整理

        在开始之前,我们先在scr/types目录下创建typings.d.ts文件,用于下面相关类型问题解决,提供可定义的文件。

3.1 opera属性不存在

        如下图,在调用window对象的opera属性,显示其不存在属性“opera”。

        在typings.d.ts文件中声明以下接口类型,代码如下:

// 解决平台判断中的opera不存在问题
declare interface Window {opera: any
}

3.2 window不存在问题

        同样typings.d.ts中声明以下接口类型,在代码如下:

declare const window: Window | undefined

        因window有可能为undefined,所以在使用前需要先判断是否存在,示例如下:

if(window) window.location.href = '跳转地址'

3.3 document不存在问题

        声明类型,代码如下:

declare const document: Document

3.4 第三方插件

        如上图,在使用qrcode生成二维码插件时,会出现波浪线,提示错误为:

无法找到模块“qrcode”的声明文件。
尝试使用 `npm i --save-dev @types/qrcode` (如果存在),或者添加一个包含 `declare module 'qrcode';` 的新声明(.d.ts)文件

        这个提示信息给出了两种解决方案,我们使用第二种,在typings.d.ts中声明,代码如下:

// 将提示中第二种方案代码贴到typings.d.ts文件中即可
declare module 'qrcode'

3.4 类型声明

        我们也可以在types目录中创建新的 *.d.ts文件,或者在typings.d.ts中声明全局类型。

        当使用axios发送请求时,封装请求函数,并约束接口函数的入参和返回结果。这里还是在typings.d.ts中声明,代码如下:

// 请求响应类型接口(T为泛型,使用时指定)
declare interface ApiResponse<T> {msg: stringstatus: string | numberdata: T
}// 请求响应结果类型接口(T为泛型,使用时指定)
declare type ApiResult<T> = Promise<ApiResponse<T>>

        然后在定义接口函数时,通过关联对应类型,来约束开发者传入约定的数据,并且得到可预见的结果。接口函数 代码如下:

// axios封装文件
import Request from '@/utils/request'// 定义通用接口函数,通过泛型N, M在运行时告诉程序,data和响应结果的数据结构类型
export const commonServiceApi = <N, M>(params: {methodName: string, data?: M}): ApiResult<N> => {const udata = { MethodName: params.methodName }Object.assign(udata, params['data'])return Request({url: APIServiceURL,method: "post",params: udata})
}

        使用通用接口函数,例如获取菜单数据,代码如下:

// 声明菜单数据类型
type MenuType = {id: number,name: string,// 略...
}// 查询菜单数据
commonServiceApi<MenuType, unknown>({methodName: 'categoryList'}).then(res => {// do something...console.log(res)
})

        当使用通用接口函数时,指定菜单响应数据类型为MenuType,则编译器就知道响应结果为MenuType了;因为这里没有入参数据,所以第二个泛型传的是unknown。

        在Vue3 + TypeScript项目中,遇到波浪线问题,通常是类型错误、语法错误或配置问题,所以通过“一、问题汇总”中的方法,先仔细查看问题提示信息,再一一排查,基本解决绝大多数问题; 当经验积累起来后,很多问题在开发阶段就可以避免了。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机的错误计算(一百零六)

摘要 探讨含有变元负的整数次方的多项式的计算精度问题。 计算机的错误计算&#xff08;一百零五&#xff09;给出了一个传统多项式的错误计算案例&#xff1b;本节探讨含有变元负的整数次方的多项式的计算精度问题。 例1. 已知 计算 若在Python下计算&#xff0c;则有&…

Pencils Protocol上线 Vaults 产品,为 $DAPP 深入赋能

Pencils Protocol 是 Scroll 生态一站式综合收益平台&#xff0c;该平台以 DeFi 功能作为抓手&#xff0c;基于 Farming、Vaults、Auction 等功能不断向 LRT、LaunchPad、AI、FHE、RWA 等领域深入的拓展。 近期 Pencils Protocol 生态不断迎来重磅进展&#xff0c;一个是 $DAPP…

【Java】类型转换 —— 自动转换、强制转换与表达式类型自动提升

1&#xff0e;自动类型转换 Java中的自动类型转换就好比将小瓶水倒入到大瓶的换装过程。我们将小瓶水倒入到大瓶中时&#xff0c;由于小瓶的容量比大瓶的容量小&#xff0c;所以倒入的水永远不可能溢出大瓶。同样&#xff0c;在Java中&#xff0c;将取值范围小的数据类型的变量…

Django 配置邮箱服务,实现发送信息到指定邮箱

一、这里以qq邮箱为例&#xff0c;打开qq邮箱的SMTP服务 二、django项目目录设置setting.py 文件 setting.py 添加如下内容&#xff1a; # 发送邮件相关配置 EMAIL_BACKEND django.core.mail.backends.smtp.EmailBackend EMAIL_USE_TLS True EMAIL_HOST smtp.qq.com EMAIL…

2024新版IDEA创建JSP项目

1. 创建项目 依次点击file->new->Project 配置如下信息并点击create创建项目 2. 配置Web项目 点击file->Project Structure 在点击Project Settings->Module右键右边模块名称->ADD->Web 点击Create Artifact 出现如下界面就表示配置完毕&#xff0c;…

基于PHP+MySQL组合开发地方门户分类信息网站源码系统 带完整的安装代码包以及搭建部署教程

系统概述 随着互联网技术的飞速发展&#xff0c;地方门户分类信息网站逐渐成为城市生活不可或缺的一部分。它们涵盖了房产、招聘、二手交易、生活服务等多个领域&#xff0c;为当地居民提供了全方位的信息服务。为了满足这一市场需求&#xff0c;我们开发了这款基于PHPMySQL的…

videojs 播放mp4视频只有声音没有画面问题

在使用Video.js播放MP4视频时&#xff0c;如果遇到只有声音没有画面的情况&#xff0c;这通常与视频文件的编码格式、浏览器兼容性或Video.js的配置有关。以下是一些可能的解决步骤和原因分析&#xff1a; 1. 检查视频编码 MP4视频支持多种编码格式&#xff0c;但并非所有编码…

【移植】一种快速移植OpenHarmony Linux内核的方法

往期知识点记录&#xff1a; 鸿蒙&#xff08;HarmonyOS&#xff09;应用层开发&#xff08;北向&#xff09;知识点汇总 鸿蒙&#xff08;OpenHarmony&#xff09;南向开发保姆级知识点汇总~ 持续更新中…… 移植概述 本文面向希望将 OpenHarmony 移植到三方芯片平台硬件的开…

旺店通ERP集成金蝶K3(旺店通主供应链)

源系统成集云目标系统 金蝶K3介绍 金蝶K3是一款ERP软件&#xff0c;它集成了供应链管理、财务管理、人力资源管理、客户关系管理、办公自动化、商业分析、移动商务、集成接口及行业插件等业务管理组件。以成本管理为目标&#xff0c;计划与流程控制为主线&#xff0c;通过对成…

Battery management system (BMS)

电池管理系统&#xff08;BMS&#xff09;是一种专门用于监督电池组的技术&#xff0c;电池组由电池单元组成&#xff0c;在电气上按照行x列矩阵配置进行排列&#xff0c;以便在预期的负载场景下&#xff0c;在一段时间内提供目标范围的电压和电流。 文章目录 电池管理系统是如…

数据分析工具julius ai如何使用

什么是julius ai Julius AI 是一款强大的ai数据分析工具。用户可以使用excel、数据库、文本文件等多种格式的数据&#xff0c;Julius AI 会自动分析这些数据并提供详细的解释和可视化图表。官网显示它目前已经有三十万用户。它也支持手机版。 虽然openai也支持生成图表&#xf…

开放原子开源基金会OPENATOM

AtomGit_开放原子开源基金会代码托管平台-AtomGit 开放原子开源基金会是致力于推动全球开源事业发展的非营利机构&#xff0c;于 2020 年 6 月在北京成立&#xff0c;由阿里巴巴、百度、华为、浪潮、360、腾讯、招商银行等多家龙头科技企业联合发起。 精选项目&#xff1a; 比…

PPT 快捷键使用、技巧

前言&#xff1a; 本文操作是以office 2021为基础的&#xff0c;仅供参考&#xff1b;不同版本office 的 ppt 快捷键 以及对应功能会有差异&#xff0c;需要实践出真知。 shift 移动 水平/垂直 移动 &#xff1b; shift 放大/缩小 等比例放大 缩小 &#xff1b; 正圆 正…

scrapy爬虫基础

一、初识 创建项目&#xff1a; scrapy startproject my_one_project # 创建项目命令 cd my_one_project # 先进去&#xff0c; 后面在里面运行 运行爬虫命令为&#xff1a;scrapy crawl tk spiders下创建test.py 其中name就是scrapy crawl tk &…

关于文本压缩传输gzip

import gzip import base64 # 假设我们有一个文本文件要读取和压缩 input_filename 2.json # 我们将Base64编码的gzip压缩数据写入这个文件 output_filename 2.json.base64 # 读取文本文件内容&#xff08;假设文件是UTF-8编码的&#xff09; with open(input_fi…

U盘打开提示要格式化:深度剖析、恢复策略与预防指南

U盘打开提示要格式化现象阐述 在日常的数字生活中&#xff0c;U盘作为便携式存储设备的代表&#xff0c;扮演着不可或缺的角色。然而&#xff0c;不少用户都曾遭遇过这样一个令人头疼的问题&#xff1a;当满怀期待地插入U盘&#xff0c;准备访问其中存储的数据时&#xff0c;系…

【AI基础】pytorch lightning 基础学习

传统pytorch工作流是首先定义模型框架&#xff0c;然后写训练和验证&#xff0c;测试循环代码。训练&#xff0c;验证&#xff0c;测试代码写起来比较繁琐。这里介绍使用pytorch lightning 部署模型&#xff0c;加速模型训练和验证&#xff0c;记录。 准备工作 1 安装pytorch…

基于Hive和Hadoop的保险分析系统

本项目是一个基于大数据技术的保险分析系统&#xff0c;旨在为用户提供全面的汽车保险信息和深入的保险价格分析。系统采用 Hadoop 平台进行大规模数据存储和处理&#xff0c;利用 MapReduce 进行数据分析和处理&#xff0c;通过 Sqoop 实现数据的导入导出&#xff0c;以 Spark…

使用 Git 帮助文档

聊聊如何更好地查阅官方文档。 ‍ git help 学习某个工具&#xff0c;官方文档是少不了的&#xff0c;也是最权威的。我们可以使用 git help 来查看帮助&#xff0c;该命令会列举出常用的命令和介绍&#xff1a; > git help usage: git [--version] [--help] [-C <pa…

如何利用 Kafka,实时挖掘企业数据的价值?

首先&#xff0c;问读者老爷们一个简单的问题&#xff0c;如果你需要为你的数据选择一个同时具备高吞吐 、数据持久化、可扩展的数据传递系统&#xff0c;你会选择什么样的工具或架构呢&#xff1f; 答案非常显而易见&#xff0c;那就是 Kafka&#xff0c;不妨再次套用一个被反…