为什么声明不能与typescript中的isolatedModules一起使用?

Leo*_*eon 16 typescript

声明用于生成类型文件,而IsolatedModules表示所有文件都应该是一个单独的模块.为什么这两个选项一起使用?

error TS5053: Option 'declaration' cannot be specified with option 'isolatedModules'.
Run Code Online (Sandbox Code Playgroud)

Sha*_*tin 6

回答

在 Max Heiber 在评论中引用的问题中,TypeScript 团队的 Wesley Wigham发布了以下答案(强调已添加):

原因与不能在隔离模块中使用 const 枚举的原因相同:类型信息。由于隔离模块单独编译每个文件,而没有它所依赖的文件类型,因此我们写入声明文件的任何推断类型都可能是不正确的,因为它们的计算将丢失其余编译中的信息。然而,声明的发射有一个有限的子集,其中在输出中没有推断出可以支持的类型。

换句话说,isolatedModules没有提供足够的类型信息来创建完整且准确的*.d.ts声明文件。

建议的解决方法

问题评论还提供了一种建议的解决方法,其中我们有一个tsconfig用于使用独立模块进行编译,第二个 tsconfig 用于创建声明文件。

tsconfig.json

{
    "compilerOptions": {
        "incremental": true,
        "isolatedModules": true
    }
}
Run Code Online (Sandbox Code Playgroud)

tsconfig-for-declarations.json

{
    "extends": "./tsconfig",
    "compilerOptions": {
        "emitDeclarationOnly": true,
        "isolatedModules": false,
        "declaration": true
    }
}
Run Code Online (Sandbox Code Playgroud)