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

推薦する

MySQLユーザー管理操作例の分析

この記事では、MySQL ユーザー管理操作について説明します。ご参考までに、詳細は以下の通りです。こ...

初心者がHTMLタグを学ぶ(1)

初心者は、いくつかの HTML タグを理解することで HTML を学習できます。この入門書は、初心者...

Websocket に基づくシンプルなチャットルームダイアログの実装

この記事では、WebSocketを使用して簡単なチャットルームの会話を実装するための具体的なコードを...

MySQL が大規模トランザクションを避けるべき理由とその解決方法

何が大問題ですか?長時間実行され、長時間コミットされないトランザクションは、大規模トランザクションと...

Linuxの相対パスと絶対パスの使用

01. 概要絶対パスと相対パスはシェル環境でよく使用され、それぞれに独自の用途があります。相対パスの...

Nginx 構成 SSL および WSS 手順の紹介

目次序文1. Nginxのインストール1. Nginxをダウンロードする2. 依存関係をインストール...

docker compose の記述ルールについての簡単な説明

この記事ではクラスタの展開に関連する内容は紹介しませんバージョン制約Docker エンジン >...

nginxのアップストリーム設定と機能の詳細な説明

設定例 アップストリームバックエンド{ サーバー backend1.example.com 重み=5...

Linux での中国語入力方法の問題を素早く解決する

背景: 最近、資産報告関連の機能に取り組んでおり、中国語入力をサポートする必要があります。通常のショ...

React Native の基本原則の深い理解 (Bridge of React Native)

この記事では、React Native の基本をすでに理解していることを前提とし、ネイティブと Ja...

Docker イメージのエクスポート、インポート、コピーの例の分析

最初の解決策は、イメージを公開イメージリポジトリにプッシュし、それをプルダウンすることです。 2 番...

MySQL テーブル結合クエリでグループ化と重複排除を実装する例

目次ビジネスロジックデータテーブル構造クエリロジックSQL スクリプトスクリプトの説明ビジネスロジッ...

Nginxはhttpとhttpsの両方のアクセスをサポートするために同じドメイン名を設定します

Nginx は同じドメイン名で構成されており、http と https の両方でアクセスできます。証...

スライド効果を実現するためのネイティブJavaScript

ページ、特にホームページを作成するときは、通常、Web サイト全体の他のメイン ページにリンクできる...

Dockerコンテナのネットワーク管理とネットワーク分離の実装

1. Dockerネットワーク管理1. Dockerコンテナ方式1) Dockerが外部ネットワーク...