TypeScript 名前空間のマージの説明

TypeScript 名前空間のマージの説明

序文:
前のセクションの内容を復習すると、前のセクションではTSで最も一般的な宣言のマージであるインターフェースのマージを紹介しました。

宣言のマージとは、実際にはコンパイラが同じ名前の宣言を 1 つの宣言にマージすることを意味します。マージの結果、マージされた宣言は元の 2 つ以上の宣言の特性を同時に持つことになります。

インターフェースのマージでは、内部のメンバーに関数メンバーがあるかどうかが必要です。内部の関数メンバーについては、同じ名前を持つ各関数宣言がこの関数のオーバーロードとして扱われます。インターフェース A が後のインターフェース A とマージされると、後のインターフェースが優先されます。

今日はTSの宣言のマージについてもお話ししますが、今回は名前空間関連のマージについてです。

主な側面は 2 つあります。1 つは同じ名前の名前空間のマージであり、もう 1 つは他のタイプの名前空間のマージです。以下、一つずつ説明します

同じ名前の名前空間をマージする

インターフェースのマージと同様に、同じ名前を持つ 2 つ以上の名前空間のメンバーもマージされます。

では、具体的にどのように統合するのでしょうか?

同じ名前の名前空間をマージする場合は、次の 4 つの点に注意してください。

  • モジュールによってエクスポートされた同じ名前のインターフェースは、1つのインターフェースにマージされます。
  • エクスポートされていないメンバーは、元の (マージ前の) 名前空間内でのみ表示されます。つまり、マージ後、他の名前空間からマージされたメンバーは、エクスポートされていないメンバーにアクセスできなくなります。
  • 値のマージでは、値の名前が同じ場合は、後の方のネームスペースの値が優先されます。
  • 競合のないメンバーは直接混ざります

例えば:

名前空間動物 {
    クラス Cat をエクスポートします { }
}

名前空間動物 {
    エクスポートインターフェース Legged { numberOfLegs: number; }
    クラス Dog をエクスポートします { }
}


は以下と同等です:

名前空間動物 {
    エクスポートインターフェース Legged { numberOfLegs: number; }

    エクスポートクラス Cat { }
    クラス Dog をエクスポートします { }
}


上記の例では、同じ名前Animalsを持つ 2 つの名前空間が最終的に 1 つの名前空間に統合され、結果として競合しない 3 つのものが直接混在することになります。

名前空間とその他の種類のマージ

名前空間は、クラスや関数、列挙型などの他のタイプの宣言と組み合わせることができます。

同じ名前の名前空間とクラスをマージする

例えば:

クラスアルバム{
    ラベル: Album.AlbumLabel;
}
名前空間アルバム {
    export class AlbumLabel { } // マージされたクラスがアクセスできるように `AlbumLabel` クラスをエクスポートします }


名前空間とクラスを統合すると、内部クラスを持つクラスが作成される。

同じ名前の名前空間と関数をマージする

上記の内部クラス パターンに加えて、 JavaScriptでは関数を作成し、後でそれを拡張していくつかのプロパティを追加することも一般的です。 TypeScript宣言のマージを使用してこれを実現し、型の安全性を確保します。

たとえば、公式の例:

関数buildLabel(名前: 文字列): 文字列 {
    buildLabel.prefix + name + buildLabel.suffix を返します。
}

名前空間ビルドラベル {
    エクスポートlet suffix = "";
    エクスポート let prefix = "こんにちは、";
}

console.log(buildLabel("サム・スミス"));


同じ名前を持つ名前空間と列挙

列挙を拡張するために使用できます。公式の例を見てみましょう。

列挙型カラー{
    赤 = 1、
    緑 = 2、
    青 = 4
}

名前空間カラー{
    エクスポート関数mixColor(colorName: 文字列) {
        if (colorName == "黄色") {
            Color.red + Color.green を返します。
        }
        そうでない場合 (colorName == "white") {
            Color.red + Color.green + Color.blue を返します。
        }
        そうでない場合 (colorName == "マゼンタ") {
            Color.red + Color.blue を返します。
        }
        それ以外の場合は (colorName == "シアン") {
            Color.green + Color.blue を返します。
        }
    }
}

知らせ:
すべてをマージできるわけではありません。クラスは他のクラスや変数とマージできないことに注意してください。

TS 名前空間のマージに関するこの記事はこれで終わりです。TS 名前空間のマージに関する詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • TypeScript名前空間の説明
  • TypeScript名前空間の簡単な分析

<<:  HTML における画像タグの使用方法の詳細な説明

>>:  Docker を使用した nextcloud パーソナル ネットワーク ディスクの構築に関するチュートリアル

推薦する

Apache ab同時負荷ストレステストの実装方法

腹筋コマンドの原則Apache の ab コマンドは、マルチスレッドの同時リクエストをシミュレートし...

Ubuntu 16.04.4LTS に mininet をインストールする際に発生する問題と解決策

ミニネットMininet は軽量のソフトウェア定義ネットワークおよびテスト プラットフォームです。軽...

Vue2.0は適応解像度を実装する

この記事では、適応解像度を実現するためのVue2.0の具体的なコードを参考までに紹介します。具体的な...

MySQL の WriteSet 並列レプリケーションの簡単な分析

【歴史的背景】私は 3 年間 MySQL-DBA として働いてきましたが、MySQL が「基本的に利...

Vueにおける混合継承の詳細な説明

目次混合継承の影響: 1. 継承Vue.extend メソッド​プロパティを拡張する2. ミックスイ...

Vue の計算プロパティの詳細な説明

目次補間式方法計算された要約する今日は、Vue の計算プロパティについてお話ししましょう。計算プロパ...

Windows での MySQL 5.7.10 のインストールと設定のチュートリアル

MySQL は、ユーザーごとに 2 つの異なるバージョンを提供します。 MySQL コミュニティ サ...

JS 1次元配列を3次元配列に変換する例

今日、CSDN の Q&A セクションで友人が質問をしているのを見ました。彼は 1 次元配列...

Hyper-V なしで Windows 10 を動作させるソリューション

Windows10 Home Edition でHyper-vを有効にする方法をまだ探していますか?...

Vueのwatch、computed、methodsの違いのまとめ

目次1 はじめに2 基本的な使い方2.1 方法2.2 計算プロパティ2.3 リスナーを見る3 3つの...

MySQL でサーバーのインストールを開始できない場合の解決策について簡単に説明します。

コンピュータに初めて MySQL をインストールする場合、通常このエラー メッセージは表示されません...

タグのhref属性とonclickイベントの使用例

a タグは主にページ ジャンプを実装するために使用され、これは href 属性または onclick...

MySQL マスターとスレーブの不整合とその解決策の詳細な説明

1. MySQL マスタースレーブ非同期1.1 ネットワーク遅延MySQLのマスタースレーブレプリケ...

熟練デザイナーの7つの原則(2):色の使い方

<br />前回の記事:優秀なデザイナーの7つの原則(1):フォントデザイン 英語 原文...

MySQL IFNULL判定問題の解決方法

問題: mybatis によって返される null 型のデータが消え、フロントエンドの表示にエラーが...