TypeScript 面试题
目录

请解释命名空间的声明合并规则

· 约 3 分钟读完 · 第 112 / 256 章

推荐答案

在 TypeScript 中,命名空间的声明合并规则允许将多个同名的命名空间合并为一个。合并后的命名空间将包含所有合并前命名空间的成员。具体规则如下:

  1. 同名命名空间的合并:如果多个命名空间具有相同的名称,TypeScript 会将它们合并为一个命名空间。合并后的命名空间将包含所有命名空间中的成员。

  2. 非导出成员的合并:如果多个命名空间中有同名的非导出成员(如变量、函数、类等),这些成员不会被合并,而是会引发冲突,导致编译错误。

  3. 导出成员的合并:如果多个命名空间中有同名的导出成员,这些成员会被合并。如果成员是函数或类,TypeScript 会尝试进行函数重载或类合并。

  4. 嵌套命名空间的合并:如果命名空间中包含嵌套的命名空间,嵌套的命名空间也会按照相同的规则进行合并。

本题详细解读

同名命名空间的合并

在这个例子中,两个同名的命名空间 MyNamespace 被合并为一个,合并后的命名空间包含了 a 和 b 两个导出成员。

非导出成员的合并

在这个例子中,由于 a 是非导出成员,两个命名空间中的 a 会引发冲突,导致编译错误。

导出成员的合并

在这个例子中,两个命名空间中的 greet 函数被合并为一个支持重载的函数。

嵌套命名空间的合并

在这个例子中,嵌套的 Inner 命名空间也被合并,合并后的 Inner 命名空间包含了 a 和 b 两个导出成员。