解决vue+ts项目中,引入模块时提示找不到模块

9,501 阅读1分钟

当在vue+ts项目中引入一个模块时,如果出现如下报错:

image.png

无法找到模块“vue-video-player”的声明文件。“C:/Users/cheer/Desktop/blog/front-end/node_modules/vue-video-player/dist/vue-video-player.js”隐式拥有 "any" 类型。\
尝试使用 `npm i --save-dev @types/vue-video-player` (如果存在),或者添加一个包含 `declare module 'vue-video-player';` 的新声明(.d.ts)文件

尝试安装无济于事时。不要皂基:

方案一:

用 vue-cli构建完TS项目后,会再项目src目录下生成shims-vue.d.ts这个文件

shims-vue.d.ts

declare module "*.vue" {
  import Vue from "vue";
  export default Vue;
}

有了这个,在TS文件里引入vue文件时,需要加上.vue的后缀,这样就不会报找不到模块了

import Service from '@/service'

重点来了

当你想要扩展声明类型时,切记在src下也就是shims-vue.d.ts同级新增一个xx.d.ts文件(文件名随意,后缀一定是.d.ts

例如

import Vue from "vue";
import VueRouter from "vue-router";
import { Route } from "vue-router";
import { Store } from "vuex";
import t from "@/i18n";
// 扩充
declare module "vue/types/vue" {
  interface Vue {
    $router: VueRouter;
    $route: Route;
    $store: Store<any>;
    $t: t;
  }
}

方案二:分类放置type文件

1.在根目录创建types 文件夹,并创建任意名字的文件,但是结尾必须是.d.ts

image.png

2.修改tsconfig.json配置

增加如下配置

image.png

重启项目,就可以了。

tips:当然这样做的好处是1.统一管理d.ts 2.这个d.ts中可以写入其他东西。

参考:www.w3cways.com/2407.html