在try Typescript时,我意识到我在模块中的类(用作名称空间)对其他类不可用,除非我在它们前面写了export关键字,例如:

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

现在我可以像这样使用上面的代码:

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

然而,我只是想知道为什么使用这个关键字,而不是仅仅使用public关键字,这是在方法级别上用来表示一个方法或属性应该是外部可访问的.那么,为什么不使用同样的机制使类和接口等在外部可见呢?

这将产生如下代码:

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

推荐答案

主要原因是export与ECMAScript的计划相匹配.你可能会说,"他们应该使用"导出"而不是"公共",但"导出/私有/保护"的旁白是一组不匹配的访问修饰符,我相信这两者之间存在微妙的差异,可以解释这一点.

在TypeScript中,将类成员标记为publicprivate对生成的JavaScript没有影响.它只是一个设计/编译时工具,可以用来阻止TypeScript代码访问它不应该访问的东西.

JavaScript使用export关键字添加一行,将导出的项添加到模块中.在你的例子中:here.SomeClass = SomeClass;.

因此,从概念上讲,由publicprivate控制的可见性仅适用于工具,而export关键字会更改输出.

Typescript相关问答推荐

等待的R没有用响应对象展开到R

使用FormArray在Angular中添加排序

界面中这种类型的界面界面中的多态性

webpack错误:模块找不到.当使用我的其他库时,

material 表不渲染任何数据

Typescript泛型类型:按其嵌套属性映射记录列表

有条件地删除区分的联合类型中的属性的可选属性

使用订阅时更新AG网格中的行

Angular:ngx-echart 5.2.2与Angular 9集成错误:NG 8002:无法绑定到选项,因为它不是div的已知属性'

如何从输入中删除值0

Angular 16将独立组件作为对话框加载,而不进行布线或预加载

错误TS7030:并非所有代码路径都返回值.";由tsfig.json中的";Strong";:False引起

如何在具有嵌套数组的接口中允许新属性

Rxjs将省略的可观测对象合并到一个数组中

如何避免多个类型参数重复?

如何以类型安全的方式指定键的常量列表,并从该列表派生所挑选的接口?

如何在Vue动态类的上下文中解释错误TS2345?

Typescript循环函数引用

React-跨组件共享功能的最佳实践

根据索引将元组拆分为两个块