3

为什么非导出类型从 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;

使用前一种语法可防止从其他文件导入未导出的声明。

4

0 回答 0