Export Variable using Private Name

TypeScript

在 TypeScript 编译过程中,可能会遇到如下的报错:

Exported variable <variable name> has or is using private name <private name>

这一报错只会出现在开启了 declaration 输出之后。开启的方式是编译时增加 --declaration,或者在 tsconfig.json 中加入:

{
  "compilerOptions": {
    "declaration": true
  }
}

出现这一报错的原因是,最终被使用的某一个类型,引用到了某一个没有被公开(export)的类型。简单的例子如下:

interface A {
  // ...
}

interface B {
  // ...
}

export declare type Props = A | B;

这里,之所以会出现问题,理由很简单:TypeScript 试图输出一个定义类型的文件,其中就包括了 Props 的定义。然而,如果要明确定义 Props,就需要用到两个类型 AB。在这里,AB 这两个类型因为没有被公开(export),因而是私有(private)的。故,理论上来说,TypeScript 的导出定义文件中不应该包含这两个类型。而没有这两个类型的话,TypeScript 就没有办法定义 Props 了。最终,TypeScript 只能报错。

官方给出的解释可以参考这里

要解决这个问题,方法也很简单:所有使用到的类型,全部都公开(export)就好了。