默认情况下,在TypeScript外部模块声明(整个.d.ts
文件或另一个文件中的declare module
块)中,即使未标记export
,所有符号也会被导出。 。 Luke Pighetti discovered说,添加export { ... }
语句可以抑制此行为,因此仅导出标记为export
的符号。
示例my-module.d.ts
:
export const a = 1;
declare const b = 2;
export {};
consumer.ts
:
import { a } from "./my-module"; // OK
import { b } from "./my-module"; // Error
此行为可能有用。是故意的,还是我应该报告而不鼓励人们依赖的TypeScript错误?
答案 0 :(得分:3)
andy-ms says该行为是故意的。 (但它是未记录的AFAIK,就像许多高级TypeScript行为一样。:()
我找到了涉及的the compiler code。关闭自动导出的结构的完整列表:
export { ... }
export { ... } from "module"
export * from "module"
export = ...
export default
,而不是函数,类或接口定义的export default
答案 1 :(得分:0)
这是故意的。
TypeScript文件可以是脚本文件或模块文件。 与to的区别在于,模块文件至少具有一个顶级导入/导出。
当文件是模块文件时,只有使用export
关键字显式导出的代码才可用。
对于脚本文件,将其视为全局文件的一部分,这意味着您的内容将在其他文件中可用。
对于键入文件(*.d.ts
),在DefinitelyTyped中将它们编写为脚本文件,格式为declare module x { ... }
,以定义特定模块的键入。
它是用DefinitelyTyped编写的,因为它是许多模块的存储库,工具需要知道为其定义的模块。
如果您为JavaScript库创建类型文件并随该库一起分发,它将作为模块文件写入。