为什么打字稿使用关键字“出口”,使类和接口公众?(Why does Typescript use t

2019-08-18 23:45发布

虽然与打字稿涉足,我意识到我的课模块中(作为命名空间)并不适用于其他类,除非我写的export在他们面前的关键字,如:

module some.namespace.here
{
   export class SomeClass{..}
}

所以,现在我可以用上面这样的代码:

var someVar = new some.namespace.here.SomeClass();

不过,我只是想知道,为什么这个关键字用来反对只使用public其用于在方法级别以表示方法或属性应该是从外部访问的关键字。 那么为什么不直接使用同样的机制,使类和接口等外部可见?

这将使造成类似的代码:

module some.namespace.here
{
   public class SomeClass{..}
}

Answer 1:

主要的原因是, export对ECMAScript的计划相匹配。 你可以说,“他们应该使用‘出口’,而不是‘公共’,但旁白‘出口/私营/保护’是一个匹配不佳组访问修饰符的,我相信有两种解释这之间的细微差别。

在打字稿,标志着一类成员的publicprivate对生成的JavaScript没有影响。 这是一个简单的设计/编译时间的工具,可以用来阻止你的打字稿代码访问的东西它不应该。

随着export的关键字时,JavaScript添加一行将导出的项目添加到模块。 在您的例子: here.SomeClass = SomeClass;

所以,从概念上讲,通过控制知名度publicprivate仅仅是工具,而export关键字改变输出。



Answer 2:

有几件事情要添加到史蒂夫芬顿的回答:

  • export 已经意味着两个不同的东西(这取决于它是否在顶层或没有); 使得它的意思是第三个可能比加入更糟糕的public / private
  • 这绝对不是使实现更加容易; 复杂性的增加public VS export是微不足道的。 我们改变了周围一群已经关键词; 它并不困难。
  • 类成员的缺省可见性必须是公共与ES6类的建议一致,因此我们需要一些关键字来表示“不公开”。 没有合适的反义词来exportunexport ?),所以private是合乎逻辑的选择。 一旦你有private ,这将是有点疯狂的不选择public作为其相对
  • 利用export来修改内部模块的知名度与ES6模块的最佳猜测对齐


文章来源: Why does Typescript use the keyword “export” to make classes and interfaces public?