【发布时间】:2018-09-20 16:53:12
【问题描述】:
您能帮帮我吗?这是一个错误还是我误解了文档?
我在一个命名空间中有两个文件 - 你会在下面找到一个更简单的版本。
Typescript 文档state that “即使文件是分开的,它们也可以贡献给同一个命名空间,并且可以像定义在一个文件中一样被使用”。 因此,我假设一个文件中的一个类可以访问同一命名空间中的另一个文件,即使它没有被导出。 (因为如果它们被定义在同一个地方就会出现这种情况)
但是,tsc 抱怨它找不到名称“Dispatcher”。为什么会这样?我此时是否误解了文档?或者它只是一个编译器错误?如果是前者,那就太可惜了,因为只有命名空间的可见性对单元测试和封装有很大帮助。
代码:
(为简单起见更改了代码。如果存在语法错误,则由该错误引起):
Application.ts:
/// <reference path="Dispatcher.ts"/>
namespace Application {
export class Application {
constructor() {
new Dispatcher();
}
}
}
Dispatcher.ts:
namespace Application {
class Dispatcher { /* ... */ }
}
【问题讨论】:
-
不,必须导出成员才能跨不同文件“贡献”到命名空间。如果您查看生成的 JavaScript 代码,您会明白为什么会这样,所有值都在 IIFE 中声明,因此未导出的值仅在该特定函数的上下文中可见。此外,如果没有这种行为,您将无法在有助于该命名空间的 any 文件中拥有两个具有相同名称的私有属性,这是不可取的。
标签: typescript namespaces