为什么非导出类型从 TS 声明文件中隐式导出,导入但没有导出?这是一个错误吗?如果不是,这种行为称为什么,是否记录在任何地方?
背景:
我知道在没有导入或导出的 TS 声明文件中,每个声明都变成了环境,并且在没有导入的情况下可用。
在带有 ECMAScript 模块导出的声明文件中,文件中的类型只有在显式导出时才可从其他文件中使用。
TS 声明文件似乎有第三种行为,它至少有一个导入或导出语句,但没有导出声明:此类文件中的任何变量/函数/接口等声明都可以从其他文件中导入,即使它们不是t 显式导出。
例子:
奇怪的.d.ts(从自我进口)
import {} from "./weird";
declare const implicitlyExposed: {};
进口商.d.ts
import { implicitlyExposed } from "./weird"; // no error, is usable import
澄清
请注意,如果没有导出声明,则未导出的声明只会从作为模块的 .d.ts 文件中泄漏。出口声明如下所示:
declare const foo: number;
export { foo };
TS 将这种导出与带有导出修饰符的语句区别对待:
export declare const foo: number;
使用前一种语法可防止从其他文件导入未导出的声明。