为什么声明不能与打字稿中的隔离模块一起使用?



声明用于生成类型文件,而隔离模块意味着所有文件都应该是一个单独的模块。为什么这两个选项一起使用?

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
}
}

最新更新