从打字稿模块导出所有类型(和只是类型)

Max*_*lan 10 typescript typescript-typings

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

export * from 'module'
Run Code Online (Sandbox Code Playgroud)

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

export type {typeName} from 'module'
Run Code Online (Sandbox Code Playgroud)

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

export type * from 'module'
Run Code Online (Sandbox Code Playgroud)

因为这是直观的事情,但是打字稿类型导出必须命名为导出(ts 1383)。

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

我能想到的解决方法:

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

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

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

soi*_*mon 10

正如您引用的拉取请求中所述,类型的通配符重新导出尚未实现(并且可能永远不会实现)。因此,目前不可能将所有类型重新导出到根级别。您可以获得的最接近的方法是将重新导出的类型包装在它们自己的命名集合中:

// 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;
Run Code Online (Sandbox Code Playgroud)

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

  • @busterroni 这对你有用吗?当我这样做时,我得到“只有命名导出可以使用‘导出类型’”。ts(1383)` (3认同)