名前空間
名前空間は、JavaScriptで一般的に使われる次のようなパターンと同じことを実現できる構文です。
1
(function(something) {
2
3
something.foo = 123;
4
5
})(something || (something = {}))
Copied!
基本的に、something || (something = {})は、無名関数function(something) {}が何かを既存オブジェクト(something ||部分)に追加するか、新しいオブジェクト( || (something = {})の部分)を作って何かを追加することを可能にします。これが意味することは、このように何らかの分岐で分割された2つのブロックを持つことができるということです。
1
(function(something) {
2
3
something.foo = 123;
4
5
})(something || (something = {}))
6
7
console.log(something); // {foo:123}
8
9
(function(something) {
10
11
something.bar = 456;
12
13
})(something || (something = {}))
14
15
console.log(something); // {foo:123, bar:456}
Copied!
このパターンは、グローバルな名前空間を汚染しないようにJavaScriptでよく使われるパターンです。ファイルモジュールの場合、グローバルの名前空間の汚染を心配する必要はありません。しかし、それでも、一連の関数を論理的にグループ化することに役立ちます。TypeScriptは、namespaceキーワードを使って、次のようにコードをグループ化する手段を提供しています:
1
namespace Utility {
2
export function log(msg) {
3
console.log(msg);
4
}
5
export function error(msg) {
6
console.error(msg);
7
}
8
}
9
10
// 使い方
11
Utility.log('Call me');
12
Utility.error('maybe!');
Copied!
namespaceキーワードは、先ほど見たのと同じJavaScriptを生成します:
1
(function (Utility) {
2
3
// ユーティリティとして使う何らかのコード
4
5
})(Utility || (Utility = {}));
Copied!
一点、注意していただきたいことは、名前空間を入れ子にすることができるということです。なので、Utilityの下にMessaging名前空間を追加するために、namespace Utility.Messagingのようなことができます。
大抵のプロジェクトでは、namespaceではなく、ファイルモジュールを使うことを推奨します。namespaceは単に試したり、古いJavaScriptコードを移植するために使うことを推奨します。
最終更新 1yr ago
リンクのコピー