编译为 JavaScript 模块时如何重新导出从声明文件导入的类型声明?

Joh*_*man 6 javascript typescript es6-modules

我有一个用 TypeScript 编写的模块(演示源代码在这里:https://github.com/thejohnfreeman/bugs/tree/dece04bc4353bfc3f100c11fd38a4bb76cfcad67/parent)它有两个源文件:

// src/index.ts
export { String } from './types'
Run Code Online (Sandbox Code Playgroud)
// src/types.d.ts
export type String = string
Run Code Online (Sandbox Code Playgroud)

我可以构建parent为 JavaScript 模块:

yarn
npx tsc --project tsconfig.json --outDir out --module esnext
Run Code Online (Sandbox Code Playgroud)

它只编译.ts文件,并生成我所期望的,一个导出空对象的 JavaScript 模块:

// src/index.ts
export { String } from './types'
Run Code Online (Sandbox Code Playgroud)

但是,如果我更改.ts文件以导出文件中的所有内容.d.ts,如下所示:

// src/index.ts
export * from './types'
Run Code Online (Sandbox Code Playgroud)

然后我在输出中得到相同的重新导出语句:

// src/types.d.ts
export type String = string
Run Code Online (Sandbox Code Playgroud)

并且由于该.d.ts文件不产生.js输出,因此导入 './types'是悬空的。

这是一个错误吗?我希望 TypeScript 能够识别出重新导出的所有内容 './types'都是类型声明,并且该export * from './types'行将被编译为空,就像我手动命名了每个导出一样 './types'

我正在使用 TypeScript 4.2.4。