先说一下什么是类型提示,在Vue3+Volar中,UI组件会像一个typescript对象一样,告诉你它有哪些属性.

例如鼠标悬浮在el-button上,会显示它对应的一些属性.

在这里插入图片描述

你在组件上键入属性的时候也会给予你像typescript一样的编写建议.

在这里插入图片描述

如果你使用的是自己本地编写的组件,你将完美地享受到这一功能,但如果你使用的是像ant-design-vue或者element-plus一样的组件库,在未进行配置的情况下,你会遇到下面这种情况.

组件提示是any对象,volar无法为你的UI组件库提供任何提示.这相当于你在用残废版的volar+vue3.

在这里插入图片描述

不过,这并不是特别严重的残疾,解决方法如下:

1 直接引入这个组件
以 vue3 + element-plus 为例,如果需要添加类型提示, 你可以直接在vue文件中引入这个组件.

<template>
  <div>
    <el-button></el-button>
  </div>
</template>

<script lang="ts" setup>
import { ElButton } from "element-plus"
</script>
复制代码

这种方法将ElButton视同于你本地编写的组件,通过主动引入的方式获得了类型提示.

如果是少量引入的话,这种办法并无不妥.

2 通过 tsconfig.json 进行引入
打开 node_modules/element-plus/global.d.ts , 你会看到这么一个东西,

// GlobalComponents for Volar
declare module 'vue' {
  export interface GlobalComponents {
    // ...
  }
}
复制代码

注释上写着为 Volar 准备的全局组件.但从刚刚的实验来看,很明显我们的Volar没用上它.

实际上,我们需要用tsconfig.json帮助Volar用上这个ts声明文件.

修改根目录的tsconfig.json, 修改include,让ts主动接受这个声明文件.

{
  "compilerOptions": {
    "target": "esnext",
    "useDefineForClassFields": true,
    "module": "esnext",
    "moduleResolution": "node",
    "strict": true,
    "jsx": "preserve",
    "sourceMap": true,
    "resolveJsonModule": true,
    "esModuleInterop": true,
    "lib": ["esnext" "dom"],
    "baseUrl": ".",
    "paths": {
      "@/*": ["./src/*"]
    }
  }
  "include": [
    "src/**/*.ts",
    "src/**/*.d.ts",
    "src/**/*.tsx",
    "src/**/*.vue",
    "node_modules/element-plus/global.d.ts"   // <<<<<<<<<<-------添加这一行
  ]
}
复制代码

结语
以小见大,如果以后遇到ts类型提示需要全局引入,而不是一个个import的话,就可以修改tsconfig.json.

最后
如果你觉得此文对你有一丁点帮助,点个赞。或者可以加入我的开发交流群:1025263163相互学习,我们会有专业的技术答疑解惑

如果你觉得这篇文章对你有点用的话,麻烦请给我们的开源项目点点star:https://gitee.com/ZhongBangKeJi/CRMEB不胜感激 !

PHP学习手册:https://doc.crmeb.com/
技术交流论坛:https://q.crmeb.com/

Logo

前往低代码交流专区

更多推荐