You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rollup提示类型未从文件导出但实际存在,Svelte+TS项目编译失败

问题原因与解决方案

1. 类型-only导入语法缺失(最常见原因)

VoidPromiseCallback是TypeScript类型定义,不属于运行时代码,TS编译为JS时会自动擦除所有类型相关代码。你当前的导入语法会让Rollup尝试从编译后的types.js文件中查找运行时导出的VoidPromiseCallback值,自然找不到。VS Code能正常跳转是因为编辑器仅做类型层面的静态识别,不会校验运行时导出。
解决方法:
使用TypeScript的类型专用导入语法:

// 如果Topic也是类型,统一用type导入
import type { Topic, VoidPromiseCallback } from '../types.js';

// 如果Topic是运行时可用的类/变量,分开导入
import { Topic } from '../types.js';
import type { VoidPromiseCallback } from '../types.js';

如果你的项目开启了tsconfig.json中的isolatedModules配置,强制要求所有类型导入必须使用import type语法,调整后即可解决报错。

2. Rollup缓存未失效

你的猜测是合理的,Rollup的增量构建缓存没有检测到types.ts的导出变更,会保留旧的导出识别结果。
解决方法:
删除所有本地构建缓存目录后重启开发服务即可:

  • 通用Rollup缓存:删除.rollup.cache目录
  • SvelteKit项目:删除.svelte-kit目录
  • 通用依赖缓存:删除node_modules/.cache目录

3. 导入路径后缀配置不匹配

你导入时用的后缀是.js,但源文件是.ts,如果Rollup的TS处理插件配置不正确,会无法正确识别.ts文件到.js导入路径的映射。
解决方法:

  • 尝试将导入路径修改为../types.ts
  • 检查tsconfig.json中的moduleResolution配置,设置为Bundler或NodeNext即可支持在TS文件中导入.js后缀的模块路径。

4. 命名冲突或隐性语法错误

小概率情况是types.ts中VoidPromiseCallback定义前存在语法错误,或者有同名的未导出变量/类型覆盖了导出声明,可尝试在types.ts中临时新增一个测试导出的普通变量,看能不能正常导入,排查是不是该文件的整体导出识别异常。

内容的提问来源于stack exchange,提问作者Cédric Van Rompay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 14:57:03