typescript - 为什么 Typescript 使用关键字 "export"来公开类和接口(interface)?

标签 typescript module public access-modifiers

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

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

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

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

但是我只是想知道为什么使用此关键字而不是仅使用在方法级别使用的 public 关键字来表示方法或属性应该可以从外部访问。那么为什么不使用同样的机制使类和接口(interface)等在外部可见呢?

这将给出如下结果代码:

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

最佳答案

主要原因是 export 符合 ECMAScript 的计划。你可能会争辩说“他们应该使用‘export’而不是‘public’,但是除了‘export/private/protected’是一组不匹配的访问修饰符之外,我相信这两者之间存在微妙的差异来解释这一点.

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

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

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

关于typescript - 为什么 Typescript 使用关键字 "export"来公开类和接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15760462/

相关文章:

typescript - d.ts 中对 servicestack typescript 客户端的日期支持

c++从另一个文件访问函数

java - 何时使用本地访问修饰符?

iOS:如何定义公共(public)方法?

debugging - Webpack 捆绑的 Node 或 Electron 主进程的 VSCode 调试

javascript - 使用 Angular 5 中的服务在两个不相关的组件之间共享数据

javascript - 对于用 TypeScript 编写的项目,使用变量而不是具有相对路径的字符串

node.js - 如何用node+express共享一个对象

haskell - 在 Haskell 中写或不写 `module Main where`

Javascript 模块无法在 github 页面上运行