Svelte组件库npm build报错:TS2307无法找到模块及类型声明
解决TS2307: 找不到Svelte模块或类型声明的问题
针对你遇到的TS2307错误,以下是几个可行的解决步骤:
1. 添加Svelte模块的类型声明文件
TypeScript默认无法识别.svelte文件的类型,需要手动声明:
在src目录下创建src/svelte.d.ts文件,内容如下:
declare module '*.svelte' { import type { ComponentType } from 'svelte'; const component: ComponentType; export default component; }
当前tsconfig.json的"include": ["src/**/*"]已经能覆盖这个文件,无需额外修改include规则。
2. 调整Rollup插件配置
- 移除重复的resolve插件:你同时使用了
resolve()和nodeResolve(),两者是同一插件的不同版本,保留@rollup/plugin-node-resolve即可 - 给
svelte-preprocess显式指定tsconfig路径,确保TypeScript预处理逻辑正确
修改后的plugins数组:
plugins: [ json({ compact: true }), svelte({ preprocess: autoPreprocess({ typescript: { tsconfigFile: './tsconfig.json' } }), }), nodeResolve(), typescript({ sourceMap: true, rootDir: './src' }), peerDepsExternal(), postcss({ extensions: ['.css'], }), ],
3. 修复tsconfig配置错误
你的"importsNotUsedAsValues": "remove"配置项位置错误,需要移到compilerOptions内部,否则不会生效:
{ "extends": "@tsconfig/svelte/tsconfig.json", "include": ["src/**/*"], "exclude": ["node_modules/*", "__sapper__/*", "public/*"], "compilerOptions": { "target": "es2016", "module": "esnext", "outDir": "dist", "strict": true, "moduleResolution": "node", "esModuleInterop": true, "declaration": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, "importsNotUsedAsValues": "remove" } }
4. 验证依赖完整性
确保已安装所有必要依赖:
npm install svelte @tsconfig/svelte svelte-preprocess @rollup/plugin-typescript @rollup/plugin-node-resolve --save-dev
完成以上调整后,重新执行npm build即可解决类型找不到的问题。
内容的提问来源于stack exchange,提问作者Ninosaurier
相关产品推荐
相关产品推荐

