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

推薦する

M1 チップに MySQL 8.0 データベースをインストールする方法 (画像とテキスト)

1. ダウンロードまず、MySQLの国内ミラーをお勧めします。特に速いわけではありませんが、それで...

Vue要素ヘッダーにスラッシュを追加するための実装コード

<テンプレート> <div class="アプリコンテナ"&...

MySQL 5.7.20 圧縮版のダウンロードとインストールの簡単なチュートリアル

1. ダウンロードアドレス:参考: http://dev.mysql.com/downloads/m...

chkconfig および systemctl コマンドを使用して Linux サービスを有効または無効にする方法

これは Linux 管理者にとって重要な (そして素晴らしい) トピックなので、誰もが Linux ...

Dockerを使用してブログサイトを素早く構築する方法の詳細な説明

目次1. 準備2. 展開プロセス3. アクセステストHalo は、ブログに慣れている学生に追加のオプ...

CentOS 6.x のインストール時に発生するエラー「ディスク sda に BIOS RAID メタデータが含まれています」の解決方法

今日、CentOS6.2 をインストールしていたところ、ハード ドライブの検出段階を通過できませんで...

CSS クロスブラウザ スタイルのバグのデバッグについて

まず最初に、適切なブラウザを選択します。私が Chrome を選択したのは、その強力なデバッグ ツー...

Windowsにmysql5.7をインストールする方法

まずmysqlの圧縮バージョンをダウンロードします。公式ダウンロードアドレスは123WORDPRES...

keepalived+nginx の高可用性を実装する方法の例

1. keepalived の紹介Keepalived は、もともと LVS クラスタ システム内の...

LinuxはNetworkManagerを使用してMACアドレスをランダムに生成します

今では、自宅のソファーに座っていても、外の喫茶店にいても、ノートパソコンの電源を入れてWi-Fiに接...

Windows プラットフォームでの MySQL のインストールと設定方法と注意事項

2.1、msiインストールパッケージ2.1.1、インストール特に重要なのは、インストール前に、元の ...

Docker で複数のアプリケーション サイトをプロキシするために Nginx を使用する方法

序文エージェントの役割は何ですか? - 複数のドメイン名が同じサーバーに解決される- 1つのサーバー...

SVN のインストールと基本操作 (グラフィック チュートリアル)

目次1. SVNとは何か2. SVNサーバーとクライアントの取得方法3. SVN ワークフローとアー...

Dockerコンテナの状態変換の実装

Dockerコンテナの状態遷移図2度目の実戦 [root@localhost ~]# docker ...

HTML テーブルタグチュートリアル (27): セルの背景画像属性 BACKGROUND

セルの背景画像を設定でき、任意の GIF または JPEG 画像ファイルを使用できます。基本的な構文...