Vite+TS项目使用Swiper执行npm run build打包报TS2322错误如何解决?
问题根因
该错误为Swiper高版本Vue组件的TS类型定义缺陷导致:开发环境下Vite不会执行全量TS类型校验,因此运行无异常;生产构建时触发全量类型检查,识别到swiper组件必填类型属性缺失,抛出TS2322错误。
解决方案
你可以任选以下任意一种方式修复:
- 方案1:修改模板代码,给swiper组件显式传递空的swiperRef属性(最推荐,无副作用)
修改后的template代码如下:
<template> <swiper :navigation="true" class="mySwiper" :swiper-ref="null"> <swiper-slide>Slide 1</swiper-slide> <swiper-slide>Slide 2</swiper-slide> <swiper-slide>Slide 3</swiper-slide> <swiper-slide>Slide 4</swiper-slide> <swiper-slide>Slide 5</swiper-slide> <swiper-slide>Slide 6</swiper-slide> <swiper-slide>Slide 7</swiper-slide> <swiper-slide>Slide 8</swiper-slide> <swiper-slide>Slide 9</swiper-slide> </swiper> </template>
- 方案2:修改tsconfig.json配置,跳过第三方库类型校验
在compilerOptions中新增"skipLibCheck": true即可,修改后的配置片段如下:
{ "compilerOptions": { "target": "esnext", "useDefineForClassFields": true, "module": "esnext", "moduleResolution": "node", "strict": true, "skipLibCheck": true, "jsx": "preserve", "sourceMap": true, "resolveJsonModule": true, "esModuleInterop": true, "lib": ["esnext", "dom"], "noImplicitAny": false, "allowJs": true, }, "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"] }
- 方案3:降级Swiper版本
如果你使用的是Swiper 9.x及以上版本,可以卸载当前版本后安装8.x稳定版:npm uninstall swiper && npm install swiper@8.4.7
内容的提问来源于stack exchange,提问作者JAZM
相关产品推荐
相关产品推荐

