typescript 中的 export 和 public 有啥区别?

Posted

技术标签:

【中文标题】typescript 中的 export 和 public 有啥区别?【英文标题】:What is the difference between export and public in typescript?typescript 中的 export 和 public 有什么区别? 【发布时间】:2013-12-02 09:10:42 【问题描述】:

我认为这是this question 的不同倾向。也许这个问题的措辞更好,你什么时候使用 public,而不是 export?从我的阅读来看,似乎 C#/Java 人认为公开的任何地方,你真正想要的是导出。

您将在何时/何地使用 public 而不是 export?

【问题讨论】:

【参考方案1】:

public 作为可见性修饰符在技术上什么都不做(默认情况下,所有类成员都是公共的);它作为private 的明确对应物存在。仅在类内是合法的。

export 根据其上下文(在文件的***成员或module 块中)执行两种不同的操作。

在文件的顶层,export 表示包含文件是一个外部模块(即它将使用 RequireJS、Node 的 require 命令或其他一些 CommonJS/ AMD 兼容的加载程序)并且您放置 export 的符号应该是该外部模块的导出成员。

module 块内,export 表示指定成员在该模块块外可见。 module 块中事物的默认值是“闭包隐私”——未导出的对象在模块外不可见。当module 内的声明具有export 修饰符时,它反而成为可以从模块外部访问的模块对象的属性。

publicexport 在语言中没有任何地方是合法的,因此在这方面选择相对容易。

【讨论】:

好的,所以当我认为是公共的(来自 C#/Java)时,我使用导出的模块和类。但是对于类中的函数和变量,是不是也标记为导出呢?还是默认情况下它们是公开的,不需要导出? 类中没有“导出”的概念。默认情况下,所有成员都是公开的。 好的,谢谢。它是出口而不是公共的,这对我来说绝对很奇怪。我知道在 javascript 中发生的事情有点不同,但我认为仍然 public 应该隐含地表示导出。 一个令人困惑的话题的真正好答案!也许***导出应该有一个不同的名称,即使可能有低级相似性看起来是一个重要的区别,编译器错误也不清楚。 模块本身是否需要有导出限定符?【参考方案2】:

export 专门用于模块,例如:

module foo
    export var bar;

public 用于类成员/方法,例如:

class Foo
    public bar = 123;

如果您想了解有关模块的更多信息,我制作了一个视频:http://www.youtube.com/watch?v=KDrWLMUY0R0&hd=1

【讨论】:

以上是关于typescript 中的 export 和 public 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

typescript中的esModuleInterop选项

带有 es6 导入的 Module.exports 用于 typescript 中的 webpack.config.ts

Typescript中的模块和继承

从nodejs,es6,typescript方面去弄清楚exports,require,export,import,export=

Nodejs/Express/Typescript 需要 module.exports

es6模块 nodejs模块和 typescript模块