d.ts文件缺失import type导致TypeScript编译失败问题求助
解决TypeScript生成CJS声明文件时的TS2846错误(未使用import type)
可以让TypeScript编译器直接生成带有import type的声明文件,核心是通过调整编译配置实现,同时解决手动重命名.d.cts带来的兼容问题,具体方案如下:
1. 配置verbatimModuleSyntax与正确的模块解析模式
在tsconfig.json中启用verbatimModuleSyntax选项,并将moduleResolution设置为Node16或NodeNext:
{ "compilerOptions": { "declaration": true, "declarationDir": "./dist/types", "module": "CommonJS", "moduleResolution": "Node16", "verbatimModuleSyntax": true, "target": "ES2020" } }
verbatimModuleSyntax:TypeScript 4.7+引入的选项,会让编译器严格区分类型导入和值导入,生成声明文件时自动将仅用于类型的导入转换为import type,完全符合TS2846的要求。Node16/NodeNext模块解析模式:会自动为CommonJS输出生成.d.cts类型文件,无需手动重命名,从根源避免旧版TS的兼容问题。
2. 规范源码中的导入写法
如果源码中存在仅导入类型的语句,建议直接使用import type语法(比如import type { SomeType } from './module'),这样编译器生成声明文件时会直接保留正确的import type写法,也能在开发阶段提前规避类型导入相关的错误。
3. 兼容旧版TypeScript(低于4.7)
如果需要兼容TS 4.7以下版本,可以使用已被弃用的importsNotUsedAsValues选项替代:
{ "compilerOptions": { "declaration": true, "importsNotUsedAsValues": "error", "module": "CommonJS" } }
设置为error会强制要求所有仅用于类型的导入必须使用import type,生成的声明文件也会对应生成符合要求的导入语句。
内容的提问来源于stack exchange,提问作者Simon Boudrias
相关产品推荐
相关产品推荐

