从打字稿模块中导出所有类型(以及仅类型)

时间:2020-08-25 23:03:37

标签: typescript typescript-typings

如果要导出模块的所有导出成员(包括代码),可以使用

export * from 'module'

如果我想导出没有 代码的类的类型,我可以做

export type {typeName} from 'module'

现在,我需要从模块中导出所有类型,而无需 代码。我很想做

export type * from 'module'

这是直观的事情,但打字稿类型为exports must be named exports(ts 1383)。

那么我如何以一种无法在运行时使用其成员的方式从模块中导出所有内容?

我能想到的解决方法:

  1. 克服它并使用export *。这是一个选择。但是对于我们的用例,我不希望我们库的用户使用这些类,而只是使用它们来注释其类型

  2. 请问所有使用我们的图书馆的人都请使用import type {typeName} from 'myLibrary'。我想这也是一个选择,但是我如何说服用户这样做?

tl; dr:如何在Typescript中模拟全局类型导出?

1 个答案:

答案 0 :(得分:0)

如您的 referenced pull request 所述,类型的通配符重新导出尚未实现(并且可能永远不会实现)。因此,当前不可能将所有类型重新导出到根级别。最接近的是将重新导出的类型包装在它们自己的命名集合中:

// your-module
import type * as Types from "external-module";
export { Types };

// Usage by the end user
import { Types } from "your-module";
let a:Types.Class;

这种方法的缺点是用户不能像 import { Class } from "your-module"; 一样独立导入类型。尽管类型仅作为类型导出,因此这仍然不会影响包的大小,并且仍然无法实例化导出的类型。