声明用于生成类型文件,而隔离模块意味着所有文件都应该是一个单独的模块。为什么这两个选项一起使用?
error TS5053: Option 'declaration' cannot be specified with option 'isolatedModules'.
答案
在Max Heiber在评论中提到的问题中,TypeScript团队的Wesley Wigham发布了以下答案(着重号是加的):
原因与您不能在隔离模块中使用 const 枚举的原因相同:类型信息。由于隔离模块单独编译每个文件,而不编译它所依赖的文件类型,因此我们写入声明文件的任何推断类型都可能是不正确的,因为它们的计算将缺少编译其余部分的信息。但是,声明发出的子集有限,其中输出中没有推断出可能受支持的类型。
换句话说,isolatedModules
没有提供足够的类型信息来创建完整准确的*.d.ts
声明文件。
建议的解决方法
问题注释还有一个建议的解决方法,其中我们有一个用于编译隔离模块的tsconfig
,以及第二个用于创建声明文件的 tsconfig。
tsconfig.json
{
"compilerOptions": {
"incremental": true,
"isolatedModules": true
}
}
tsconfig-for-declarations.json
{
"extends": "./tsconfig",
"compilerOptions": {
"emitDeclarationOnly": true,
"isolatedModules": false,
"declaration": true
}
}