タイトルのように:TypeScriptは名前空間をサポートしていますか?もしそうなら、私はそれらをどのように使用しますか?
5 に答える
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プログラムでまったく同じモジュール名を再利用する場合、コードは同じモジュールに属するということです。したがって、ネストされたモジュールを使用して、階層的な名前空間を実装できます。
バージョン1.5以降、Typescriptはnamespace
キーワードをサポートしています。名前空間は内部モジュールと同等です。
前:
module Math { export function add(x, y) { ... } }
後:
namespace Math { export function add(x, y) { ... } }
module
内部モジュールを定義するために、との両方を使用できるようになりnamespace
ました。
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/をご覧ください。
'namespace'キーワードはありませんが、内部モジュール('module'キーワードを使用)と外部モジュール('export'キーワードを使用)は、コードを論理階層に分割する同様の方法を提供します。
誤り...
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