zoukankan      html  css  js  c++  java
  • Why does Typescript use the keyword “export” to make classes and interfaces public?

    原文: https://stackoverflow.com/questions/15760462/why-does-typescript-use-the-keyword-export-to-make-classes-and-interfaces-publ

    Question:

    While dabbling with Typescript I realised my classes within modules (used as namespaces) were not available to other classes unless I wrote the export keyword before them, such as:

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

    So now I can use the above code like this:

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

    However I was just wondering why this keyword is used opposed to just using the public keyword which is used at method level to signify that a method or property should be externally accessible. So why not just use this same mechanism to make classes and interfaces etc externally visible?

    This would give resulting code like:

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

    ---------------------------------------------------------------------------------------------------------------

    Answers:

    The primary reason is that export matches the plans for ECMAScript. You could argue that "they should have used "export" instead of "public", but asides from "export/private/protected" being

    a poorly matched set of access modifiers, I believe there is a subtle difference between the two that explains this.

    In TypeScript, marking a class member as public or private has no effect on the generated JavaScript. It is simply a design / compile time tool that you can use to stop your TypeScript code accessing things it shouldn't.

    With the export keyword, the JavaScript adds a line to add the exported item to the module. In your example: here.SomeClass = SomeClass;.

    So conceptually, visibility as controlled by public and private is just for tooling, whereas the export keyword changes the output.

  • 相关阅读:
    使用boost的type_index打印数据类型
    display:flex;下的子元素width无效问题
    three.js 材质翻转
    qt5 打包exe执行文件
    脚本免交互生成秘钥
    脚本连接主机创建用户expect
    expect用法
    免密登录脚本expect
    shell变量的定义规则
    shell变量如何定义?
  • 原文地址:https://www.cnblogs.com/oxspirt/p/9759388.html
Copyright © 2011-2022 走看看