故意“export {}”关闭 TypeScript 模块声明中所有符号的自动导出吗?

Mat*_*hen 3 typescript

在 TypeScript 外部模块声明(整个.d.ts文件或declare module另一个文件中的块)中,默认情况下,即使未标记 ,也会导出所有符号export。Luke Pighetti发现添加export { ... }语句可以抑制这种行为,以便仅export导出标记的符号。

例子my-module.d.ts

export const a = 1;
declare const b = 2;
export {};
Run Code Online (Sandbox Code Playgroud)

consumer.ts:

import { a } from "./my-module";  // OK
import { b } from "./my-module";  // Error
Run Code Online (Sandbox Code Playgroud)

此行为可能有用。这是故意的,还是我应该报告而不是鼓励人们依赖的 TypeScript bug?

Mat*_*hen 5

安迪-MS 表示这种行为是故意的。(但据我所知,它是无证的,就像许多高级 TypeScript 行为一样。:( )

我追踪到了所涉及的编译器代码。关闭自动导出的结构的完整列表:

  • export { ... }
  • export { ... } from "module"
  • export * from "module"
  • export = ...
  • export default表达式的,但不是export default函数、类或接口定义的