重新导出类型,使其不再位于命名空间下

Re-export types so that they are no longer under a namespace

提问人:bp99 提问时间:3/17/2023 更新时间:3/18/2023 访问量:178

问:

我有一个自动生成的 Typescript 文件,其结构如下:types.d.ts

declare namespace Definitions {
  export interface Foo { ... }
  export interface Bar { ... }
}

由于此文件已生成,因此我不想对其进行编辑。不幸的是,生成器工具创建了这些命名空间,它不在我的控制范围内。

我的最终目标是能够使用接口,而不必使用命名空间前缀。目前,在另一个导入带有定义的包中,我可以做到FooBarDefinitions

import { Definitions } from 'my-package-with-the-defs'

const foo: Definitions.Foo = { ... }

但我想要的是

import { Foo } from 'my-package-with-the-defs'

const foo: Foo = { ... }

我知道我可以从 重新导出东西,例如my-package-with-the-defs

import { Definitions } from './types'
export type Foo = Definitions.Foo

在一些主()文件中,这样我就可以随心所欲地使用。但是命名空间包含多个接口,我想将它们全部重新导出到“全局”命名空间中。index.tsFooDefinitions

有没有办法做到这一点,既不单独添加每个重新导出文件,也不自动生成这个重新导出文件?

TypeScript 命名空间

评论

1赞 jsejcksn 3/17/2023
简而言之:。最好的选择是 (1) 提交 PR 以更改上游导出的类型,或 (2) 使用编译器 API 识别所需的命名空间类型并以编程方式重新导出它们。
0赞 jsejcksn 3/18/2023
你想把它看作一个答案,还是我仍然错过了什么?
0赞 bp99 3/18/2023
我不这么认为。是的,请添加您的评论作为答案,以便我可以将其标记为(可悲但真实的)解决方案:)

答:

2赞 jsejcksn 3/18/2023 #1

有没有办法做到这一点,既不单独添加每个重新导出文件,也不自动生成这个重新导出文件?

目前,没有。其他选项包括:

  1. 提交 PR 以更改上游导出的类型
  2. 使用编译器 API 识别所需的命名空间类型并以编程方式重新导出它们