53

タイトルのように:TypeScriptは名前空間をサポートしていますか?もしそうなら、私はそれらをどのように使用しますか?

4

5 に答える 5

55

Typescriptを使用すると、ECMAScript 6の内容に密接に関連するモジュールを定義できます。次の例は、仕様から抜粋したものです。

module outer {
    var local = 1;
    export var a = local;
    export module inner {
        export var x = 10;
    }
}

ご覧のとおり、モジュールには名前があり、ネストすることができます。モジュール名にドットを使用する場合、typescriptはこれを次のようにネストされたモジュールにコンパイルします。

module A.B.C {
    export var x = 1;
}

これは等しい

module A {
    module B {
        module C {
            export var x = 1;
        }
    }
}

また重要なのは、1つのtypescriptプログラムでまったく同じモジュール名を再利用する場合、コードは同じモジュールに属するということです。したがって、ネストされたモジュールを使用して、階層的な名前空間を実装できます。

于 2012-10-05T08:12:29.733 に答える
28

バージョン1.5以降、Typescriptはnamespaceキーワードをサポートしています。名前空間は内部モジュールと同等です。

Typescriptの新機能から:

前:

module Math {
    export function add(x, y) { ... }
}

後:

namespace Math {
    export function add(x, y) { ... }
}

module内部モジュールを定義するために、との両方を使用できるようになりnamespaceました。

于 2015-07-24T18:01:51.123 に答える
9

TypeScript名前空間の例を次に示します。

///<reference path='AnotherNamespace/ClassOne.ts'/>
///<reference path='AnotherNamespace/ClassTwo.ts'/>

module MyNamespace
{
    import ClassOne = AnotherNamespace.ClassOne;
    import ClassTwo = AnotherNamespace.ClassTwo;

    export class Main
    {
        private _classOne:ClassOne;
        private _classTwo:ClassTwo;

        constructor()
        {
            this._classOne = new ClassOne();
            this._classTwo = new ClassTwo();
        }
    }
}

詳細については、http ://www.codebelt.com/typescript/javascript-namespacing-with-typescript-internal-modules/をご覧ください。

于 2013-11-03T21:54:08.553 に答える
7

'namespace'キーワードはありませんが、内部モジュール('module'キーワードを使用)と外部モジュール('export'キーワードを使用)は、コードを論理階層に分割する同様の方法を提供します。

于 2012-10-05T00:35:52.250 に答える
4

誤り...

module A.B.C {
    export var x = 1;
}

に等しい

module A {
    export module B {
        export module C {
            export var x = 1;
        }
    }
}

モジュールAの外に書くことができるからです:

var y = A.B.C.x;

だが :

module A {
    module B {
        module C {
            export var x = 1;
        }
        var y = C.x; // OK
    }
    //var y = B.C.x; // Invalid
}
//var y = A.B.C.x;   // Invalid
于 2015-07-21T11:45:47.783 に答える