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 パーソナル ネットワーク ディスクの構築に関するチュートリアル

推薦する

IE 8/Chrome/Firefox と互換性のあるコメント返信ポップアップマスク効果実装アイデア

平日はニュースに注目して、テンセントをよく閲覧しています。しかし、コメントへの返信はほとんど見られま...

IDEA を使用して Web プロジェクトを作成し、Tomcat に公開する方法

目次ウェブ開発1. Web開発の概要Tomcatのインストールと設定Tomcatをインストールする2...

innerHTML を理解する

<br />関連記事: innerHTML HTML DOM insertRow() メ...

Linux Zabbixカスタム監視およびアラーム実装プロセスの分析

ターゲットzabbix フロントエンド監視の iostat コマンドでデータの 1 つを表示します。...

簡単な手順で純粋な CSS3 で 3D 反転効果を実現

フロントエンド開発者の必須科目であるCSS3は、多くの基本的なアニメーション効果を実現するのに役立ち...

MySQLのユーザーアカウント管理と権限管理の詳細な説明

序文MySQL の権限テーブルは、データベースの起動時にメモリにロードされます。ユーザーが ID 認...

js でクラスセレクターと名前属性セレクターを実装する手順の例

jQuery の登場により、DOM の操作効率が大幅に向上し、開発がより高いレベルに引き上げられまし...

MySqlはページクエリ機能を実装します

まず、ページ分割クエリを使用する理由を明確にする必要があります。データが膨大なため、すべてのデータを...

Vueのフィルターとディレクティブの詳細な説明

目次vueカスタムディレクティブグローバル指令ローカル指示使用フック関数(両方ともオプション)使用方...

MySQL フラッシュリストとダーティページフラッシュメカニズム

1. レビューMySQL の起動後にバッファ プールが初期化されます。バッファ プールは N 個の空...

CSSは2つの要素をブレンドする効果(スティッキー効果)を実現します。

数年前、Taobaoのモバイル版の左下隅に面白い丸いボタンがあったことを覚えています。それをクリック...

角度コンテンツ投影の詳細な説明

目次単一コンテンツ投影マルチコンテンツ投影単一条件のコンテンツ投影アプリ-人物-htmlアプリ担当者...

CPU、マシンモデル、メモリなどの情報を表示するLinuxシステム

システムメンテナンス中は、いつでも CPU 使用率を確認し、対応する情報に基づいてシステムの状態を分...

mysql-connector-java8.0.27 へのアップグレードに関する注意事項

最近、オンライン セキュリティ スキャンにより、MySQL コネクタに脆弱性が見つかりました。確認し...

MySQL 5.x の文字化け問題の解決方法

MySQL はよく使われるオープンソースのデータベース ソフトウェアですが、初めてのユーザーにはあま...