Vue3:naive-ui组件自动引入后ts定义类型丢失解决方案

使用naive-ui按需引入时经常单页面引入过多组件,并且有时漏掉一个引入,也不回报错,排查起来很麻烦,就改成了官方的自动引入方法:
在这里插入图片描述
使用一段时间后发现不对劲,怎么naive最爽的ts定义怎么崩了,所有的组件类型都改成any了:
在网上找相关内容也没有类似解决方案,心情瞬间不爽了
在这里插入图片描述
最终自己摸索,完美解决:
在这里插入图片描述

解决方案

在查找定义类型时,发现有两处类型定义:
目录均为naive包下的volar定义,因为一个any定义导致全局的组件定义均覆盖成了any,删除这个定义就可以恢复,但是这个毕竟是node_modules包内的文件,删掉治标不治本,于是打算从ts配置入手。

使用自动引入后,会自动编译一个components.d.ts的定义文件,打开后发现就是组件的全局定义,就此大胆猜测,只要将ts的定义文件从naive包获取转为从这个文件获取,应该就能解决。

翻看一下当前的tsconfig.json配置文件:
在这里插入图片描述

很明显的看到这个定义原来是因为配置了volar.d.ts的type导致,翻看官方文档发现是为了volar支持:

在这里插入图片描述
这里将volar删掉,并且在include项中添加根目录的定义文件适配:

{
    "compilerOptions": {
        "types": ["node"]
    },
    "include": ["./*.d.ts"]
}

这里只写了修改的地方,“./*.d.ts”用来读取根目录下的所有.d.ts定义文件,完整示例如下:
在这里插入图片描述
如此引入后,ts的定义就正常了:
在这里插入图片描述
具体不知道是什么原因导致,发现也有人有类似的情况,已提交 issues

附上相关项目github地址:vue3-ts-admin-demo
近期在写的一个vue3+naive-ui管理端模板👍