引入resourceTimeGridPlugin后编译报错,调整版本无效求助
从你给出的错误信息和配置来看,你遇到的是FullCalendar各插件版本不兼容导致的TypeScript类型定义冲突——不同@fullcalendar/*包之间的类型(比如EventDef、Calendar)导出重复,且子插件依赖的核心类型和你安装的@fullcalendar/core版本不匹配,才会出现这些TS2484、TS2416错误。
下面是一步步的解决方法:
1. 统一所有FullCalendar相关包的版本
这是最关键的一步:打开你的package.json,把所有以@fullcalendar/开头的依赖版本改成完全一致的(比如选择最新稳定版,或者你测试过的兼容版本)。
示例依赖配置:
{ "dependencies": { "@fullcalendar/core": "^6.1.11", "@fullcalendar/daygrid": "^6.1.11", "@fullcalendar/interaction": "^6.1.11", "@fullcalendar/list": "^6.1.11", "@fullcalendar/resource-timegrid": "^6.1.11", "@fullcalendar/timegrid": "^6.1.11" } }
2. 清理旧依赖并重新安装
旧的依赖缓存可能会残留不兼容的版本,执行以下命令彻底清理后重装:
# 删除node_modules文件夹 rm -rf node_modules # 删除package-lock.json(用yarn的话删yarn.lock) rm package-lock.json # 重新安装依赖 npm install
3. 确认插件导入路径正确
确保你是从包的根目录导入插件,而不是旧版本的子路径(比如main.d.ts),正确的导入方式如下:
import { CalendarOptions } from '@fullcalendar/core'; import resourceTimeGridPlugin from '@fullcalendar/resource-timegrid'; import dayGridPlugin from '@fullcalendar/daygrid'; import timeGridPlugin from '@fullcalendar/timegrid'; import interactionPlugin from '@fullcalendar/interaction'; import listPlugin from '@fullcalendar/list';
4. 重启TypeScript服务(编辑器端)
如果用VSCode这类编辑器,TypeScript服务可能缓存了旧的类型定义,按Ctrl+Shift+P(Windows/Linux)或Cmd+Shift+P(Mac),搜索并执行TypeScript: Restart TS Server,确保加载新的匹配类型。
额外排查点
- 检查TypeScript版本:FullCalendar v6要求TypeScript 4.7及以上,如果你之前修改过TS版本,确保
package.json中的typescript版本符合要求。 - 检查重复依赖:执行
npm ls @fullcalendar/core,如果输出显示多个版本,说明存在依赖冲突,需要通过统一版本来解决。
你遇到的具体错误信息:
ERROR in node_modules/@fullcalendar/core/main.d.ts(7,14): error TS2484: 导出声明与'OptionsInput'的导出声明冲突。
node_modules/@fullcalendar/core/main.d.ts(8,26): error TS2484: 导出声明与'EventDef'的导出声明冲突。
node_modules/@fullcalendar/core/main.d.ts(34,14): error TS2484: 导出声明与'Calendar'的导出声明冲突。
node_modules/@fullcalendar/core/main.d.ts(41,24): error TS2484: 导出声明与'DateSpanApi'的导出声明冲突。
node_modules/@fullcalendar/core/main.d.ts(41,37): error TS2484: 导出声明与'DatePointApi'的导出声明冲突。
node_modules/@fullcalendar/core/main.d.ts(61,35): error TS2484: 导出声明与'CalendarState'的导出声明冲突。
node_modules/@fullcalendar/core/main.d.ts(70,14): error TS2484: 导出声明与'EventMutation'的导出声明冲突。
node_modules/@fullcalendar/core/main.d.ts(72,14): error TS2484: 导出声明与'EventApi'的导出声明冲突。
node_modules/@fullcalendar/resource-common/main.d.ts(194,9): error TS2416: 类型'VResourceSplitter'中的属性'getKeysForEventDef'不能赋值给基类型'Splitter'中的同名属性。类型'(eventDef: import("@fullcalendar/core").EventDef) => string[]'不能赋值给类型'(eventDef: import("@fullcalendar/core/structs/event").EventDef) => string[]'。参数'eventDef'和'eventDef'的类型不兼容。类型'import("@fullcalendar/core/structs/event").EventDef'不能赋值给类型'import("@fullcalendar/core").EventDef'。
node_modules/@fullcalendar/resource-common/main.d.ts(372,9): error TS2416: 类型'ResourceSplitter'中的属性'getKeysForEventDef'不能赋值给基类型'Splitter'中的同名属性。类型'(eventDef: import("@fullcalendar/core").EventDef) => string[]'不能赋值给类型'(eventDef: import("@fullcalendar/core/structs/event").EventDef) => string[]'。参数'eventDef'和'eventDef'的类型不兼容。类型'import("@fullcalendar/core/structs/event").EventDef'不能赋值给类型'import("@fullcalendar/core").EventDef'。
node_modules/@fullcalendar/timegrid/main.d.ts(217,9): error TS2416: 类型'AllDaySplitter'中的属性'getKeysForEventDef'不能赋值给基类型'Splitter'中的同名属性。类型'(eventDef: import("@fullcalendar/core").EventDef) => string[]'不能赋值给类型'(eventDef: import("@fullcalendar/core/structs/event").EventDef) => string[]'。参数'eventDef'和'eventDef'的类型不兼容。类型'import("@fullcalendar/core/structs/event").EventDef'不能赋值给类型'import("@fullcalendar/core").EventDef'。类型'EventDef'中缺少属性'resourceIds'。
内容的提问来源于stack exchange,提问作者chivukula prashanth

