2013-04-02 6 views
90

活字体と手を染めている間、私は(名前空間として使用される)はモジュール内で私のクラスを実現し、私は彼らの前exportキーワードを書いていない限りなど、他のクラスには使用できませんでした。だから今、私は上記のコードを使用することができますTypescriptでキーワード「エクスポート」を使用してクラスとインターフェイスを公開するのはなぜですか?

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

このキーワードは、単なるメソッドやプロパティが外部からアクセス可能であることを意味するメソッドレベルで使用されているpublicキーワードを使用するのではなく使用されている理由私は思っていたが

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

:このように。では、クラスとインタフェースなどを外部から見えるようにするために、この同じメカニズムを使用するだけではどうですか?主な理由は、exportは、ECMAScriptのための計画と一致していることである

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

答えて

118

:よう

これは、コードを結果として与えるだろう。 「彼らは「パブリック」の代わりに「エクスポート」を使用していたはずですが、「エクスポート/プライベート/プロテクト」以外のアクセス修飾子のセットが不適切であることを除いて、これを説明する2つの微妙な違いがあると思いますpublicまたはprivateとしてクラスメンバーをマーク活字体で。

は、生成されたJavaScriptには影響を与えません。それは単にデザイン/あなたはそれはいけない、あなたの活字体のコードへのアクセス、物事を停止するために使用できる時間のツールをコンパイルします。

です exportキーワードで

、JavaScriptがモジュールにエクスポート項目を追加するための行を追加して、あなたの例では:。here.SomeClass = SomeClass;

概念的には、publicprivateで制御される視認性は、ツーリングのためだけであり、exportキーワードは出力を変更します。スティーブ・フェントンの答えに追加する

+1

私はその決定が、キーワードの文脈を確認する必要がないと言っていたと思います。これは、何人かの人が旅行して本当に論理的ではないあなたがどのように行動するのかと振る舞いの違いは、その実装を簡単にするだけです。 – Grofit

+0

ありがとうございます。髪を引っ張ってくれます。 –

38

いくつかのこと:

  • exportはすでには(それがトップレベルでだかどうかに依存する)は、2つの異なるものを意味します。追加するよりもおそらく3番目のことを意味します。public/private
  • 実装を簡単にするのは間違いありません。 publicexportの複雑さの追加は簡単です。私たちはすでに束の周りのキーワードを変更しました。それは難しくありません。
  • クラスメンバのデフォルトの可視性は、をES6クラスの提案に合わせて公開する必要があります。したがって、 "not public"を示すキーワードが必要です。 exportunexport ??)に適切な反意語がないので、privateが論理的な選択です。あなたはprivateを持っていたら、それは内部のモジュールでの視認性を修正するexportの使用はES6モジュール
+1

追加情報ありがとう、私は完全にメンバーレベルで公開/非公開であることに同意する、私はそれがアクセスのすべてのレベルのために十分でないことが奇妙であることが分かった。しかし、これは個人的な意見であり、キーワードはキーワードであり、もっと知りたいだけです。 – Grofit

+3

実装の容易さについての私の素敵な発言を修正し、謝罪として+1を提供します:) – Fenton

+0

最初の箇条書きの点で混乱します。 「輸出」に第三の意味があるはずであると提唱しているのは誰ですか? – gravidThoughts

-4

で最高の推測のアライメントは実際に、それはノードのためださ

  • その対応として publicを選択しないと少し非常識でしょう。 jsとの互換性。

    あなたがtranspiledコードを見れば:

    export function foo(){ 
    } 
    

    あなたが得る:

    ノード構文です
    function foo(){ 
    } 
    exports.foo = foo; 
    

    +4

    これはNodeとは関係ありません。既存の2つの回答(そのうちの1つが言語設計者の1人によって投稿されています)が現場にあります。 – Stijn

    +1

    あなたは答えを出す前に何かを調べたり読んだりしていないようです... – WilomGfx

    +0

    ええ、私はもっと研究していたはずです。この回答を削除できますか?私はこれを行うためにUIに明らかな方法が表示されません。 – Eugene

    関連する問題