TypeScript におけるジェネリックケースの詳細な説明

TypeScript におけるジェネリックケースの詳細な説明

ジェネリックの定義

// 要件 1: ジェネリックは指定されていないデータ型をサポートできるため、渡されるパラメータと返されるパラメータが一貫していることが求められます // この方法では渡されるパラメータと返されるパラメータの一貫性を実現できますが、型パラメータのチェックは行われません/*
関数 getData(値: 任意): 任意 {
    「成功」を返す
}
*/

// 要件 1 を解決するためにジェネリックを定義します // T はジェネリックを表します (ここでの大文字は任意に定義できますが、通常はデフォルトで T です) 特定の型はこのメソッドが呼び出されたときに決定されます function getData<T>(value: T):T{
    戻り値;
}

// 受信文字列型 var get = getData<string>("hello")
コンソールログ(取得)

// 渡された型は数値です var getTwo = getData<number>(666)
コンソールログ(getTwo)

// 要件 2: たとえば、数値と文字列の両方を返すことをサポートする必要がある最小ヒープ アルゴリズムがあります。これは、クラス ジェネリックによって実現できます。// クラス ジェネリックを定義する class minCla<T> {
    リスト: T[] = [];

    追加(値: T):void {
        this.list.push(値);
    }

    最小():T {
        var minNum = this.list[0];
        for(var i=0; i<this.list.length; i++) {
            minNum > this.list[i] の場合 {
                minNum = this.list[i]
            }
        }
        minNumを返す
    }
}

var minNum = new minCla<数値>();
minNum.add(2);
minNum.add(1);
minNum.add(7);
console.log(minNum.min()); // 1 を返す


// 文字は ASCII コードで比較されます var minNumTwo = new minCla<string>();
minNumTwo.add("c");
minNumTwo.add("z");
minNumTwo.add("a");
console.log(minNumTwo.min()) // を返す

汎用インターフェース

// ジェネリックインターフェースを実装する 2 つの方法 // 方法 1:
// ジェネリックインターフェースを定義する interface Func {
    <T>(値: T): T
}

// ジェネリックインターフェースを実装する関数を定義する var f: Func = function<T>(value: T) {
    戻り値;
}
f<文字列>("こんにちは")
f<数値>(666)

// 方法 2:
インターフェース FuncONe {
    <T>(値: T): T
}

var f1: FuncONe = function<T>(値: T):T {
    戻り値;
}

f1<文字列>("世界")
f1<数字>(666)

ジェネリッククラスの実装

/*
1. データベース フィールドをマップするために使用される User クラスを定義します。 2. 次に、データベースを操作するために使用される MysqlDb クラスを定義します。 3. 次に、User クラスをパラメーターとして MysqlDb に渡します。 */

/*バージョン1:
クラスユーザー{
    ユーザー名: 文字列 | 未定義;
    パスワード: 文字列 | 未定義;
}

クラスMysqlDb {
    追加(ユーザー: ユーザー): ブール値 {
        console.log(ユーザー);
        true を返します。
    }
}

var u1 = 新しいユーザー();
u1.usernam = "ピカ";
u1.パスワード = "ピカ"

var msql = 新しいMysqlDb();
msql.add(u1);
*/

// ただし、上記で定義したテーブルとデータベースでは、受信データの正確性を保証することはできません // バージョン 2 // 汎用クラス MysqlDb を定義します <T>{
    追加(情報: T): ブール値 {
        コンソールログ(情報);
        true を返します。
    }
}

// ユーザークラスを定義し、それをデータベースクラス User にマップします {
    ユーザー名: 文字列 | 未定義;
    パスワード: 文字列 | 未定義;
}

var u1 = 新しいユーザー();
u1.usernam = "ピカ";
u1.パスワード = "ピカ"

// データベースをインスタンス化します (クラスは、入力パラメータの型を制限するパラメータとして使用されます)
var msql = new MysqlDb<User>();
msql.add(u1); // 受信データの形式がユーザー型であることを確認する

包括的なケース

必要:
機能:Mysql MongoDbをサポートするデータベース操作ライブラリを定義する
要件 1: Mysql と MongoDb は同じ機能を持ち、どちらも add、update、delete、get メソッドを備えています。注: 統一された仕様とコード再利用ソリューションを制約する: 制約仕様が必要なのでインターフェースを定義する必要があり、コードを再利用する必要があるのでジェネリックを使用します。1. インターフェース: オブジェクト指向プログラミングでは、インターフェースは動作とアクションの仕様を定義する仕様定義です。2. ジェネリック: 一般的な理解: ジェネリックはクラス インターフェース メソッドの再利用性を解決するためのものです*/

// 実装プロセス:
// すべてのメソッドを制約するインターフェースを定義する interface DbMethod<T> {
    追加(情報: T): ブール値;
    更新(情報: T、ID: 数値): ブール値;
    削除(id: number): ブール値;
    取得(ID: 数値): ブール値;
}

// Mysql データベース クラスを定義します。注: 汎用インターフェイスを実装するには、このクラスも汎用クラスである必要があります。class MysqlDbs<T> implements DbMethod<T> {
    追加(情報: T): ブール値 {
        コンソールログ(情報);
        true を返します。
    }    
    
    更新(情報: T, id: 数値): ブール値 {
        var obj = {
            ユーザー名: "xxxx",
            パスワード: "666"
        }
        真を返す
    }

    削除(id: 数値): ブール値 {
        console.log("削除成功");
        真を返す
    }
    
    get(id: 数値): ブール値 {
        var arr = [
            {ユーザー名: "xxx",
            パスワード: "xxxxx"
            }
        ];
        真を返す
    }
}
// テスト:
クラスユーザー{
    ユーザー名: 文字列 | 未定義;
    パスワード: 文字列 | 未定義;
};

// 渡されるパラメータの正確さを制限するには、Users クラスを使用します。var mysql = new MysqlDbs<Users>();
var u = 新しいユーザー();
u.ユーザー名 = "xxxx"
u.パスワード = "xxxxxx"
//データベースの追加、削除、変更、クエリをシミュレートします。mysql.add(u);
mysql.get(1);
mysql.update(u, 1);
mysql.削除(1)



// MongoDb データベース クラスを定義します。注: ジェネリック インターフェイスを実装するには、このクラスもジェネリック クラスである必要があります。class MongoDb<T> implements DbMethod<T> {
    追加(情報: T): ブール値 {
        コンソールログ(情報);
        true を返します。
    }    
    
    更新(情報: T, id: 数値): ブール値 {
        var obj = {
            ユーザー名: "xxxx",
            パスワード: "666"
        }
        真を返す
    }

    削除(id: 数値): ブール値 {
        console.log("削除成功");
        真を返す
    }
    
    get(id: 数値): ブール値 {
        var arr = [
            {ユーザー名: "xxx",
            パスワード: "xxxxx"
            }
        ];
        真を返す
    }
}

// テスト:
クラスUserd{
    ユーザー名: 文字列 | 未定義;
    パスワード: 文字列 | 未定義;
};

// 渡されるパラメータの正確さを制限するには、Users クラスを使用します。var mysql = new MongoDb<Userd>();
var u = 新しい Userd();
u.ユーザー名 = "xxxx"
u.パスワード = "xxxxxx"
//データベースの追加、削除、変更、クエリをシミュレートします。mysql.add(u);
mysql.get(1);
mysql.update(u, 1);
mysql.削除(1)

TypeScript のジェネリックの詳細なケース分析に関するこの記事はこれで終わりです。TypeScript のジェネリックに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • TypeScript ジェネリックを簡単に説明する方法
  • TypeScript ジェネリックパラメータのデフォルト型と新しい厳密なコンパイルオプション
  • フロントエンドにおけるTypescriptの一般的な概念の深い理解
  • webpackを使用してTypeScriptコードをパッケージ化およびコンパイルする方法を教えます
  • Typescript での infer キーワードの使用に関する詳細な理解
  • TypeScript の Enum が問題となる理由

<<:  Linux+ApacheサーバURLの大文字と小文字の区別の問題を解決する

>>:  MySQL における USING と HAVING の使用法の簡単な分析

推薦する

nginxのデフォルトポートを変更する方法の詳細な説明

まず設定ファイルがどこにあるか調べる nginx.confはどこにありますかこれらのディレクトリを調...

Linux で killall コマンドを使用してプロセスを終了する 8 つの例

Linux コマンドラインには、プロセスを強制終了するためのコマンドが多数用意されています。たとえば...

MySQL を解凍してインストールおよび完全に削除する方法の詳細なグラフィック説明

1. MySQLをインストールする(1)ダウンロードしたMySQLの圧縮ファイルをMySQLをインス...

流れと動的なライン効果を実現する純粋なCSSコード

アイデア:外側のボックスは背景を設定し、内側のボックスは背景の幅と高さを設定し、ボックスを動かすアニ...

リンクされた画像をダウンロードしてアップロードするJavaScriptの実装

写真をアップロードするので、まずはダウンロード可能な画像リソースかどうかを判断する必要があります。正...

React refsの詳細な紹介

1. 何ですかRefs 、コンピューターでは Resilient File System (ReF...

Element UI で自動サイズ調整テキストエリアの高さを設定する方法

Element UIのtextarea input自動サイズに設定すると、テキストボックスのデフォル...

Nginxはドメイン名のアクセス方法を定義しています

最近Nginxを構築しているのですが、ドメイン名でアクセスできません。 nginx 構成ファイル n...

将来的に人気のあるウェブサイトのナビゲーションの方向

<br />今は情報爆発の時代であるだけでなく、サービス爆発の時代でもあります。それはす...

Windows Server 2019 のセットアップ方法 (画像とテキスト付き)

1. Windows Server 2019 のインストールVmware に Windows Se...

Linux で PHP を 5.6 にアップグレードする実用的な方法

1: ターミナルに入ったらPHPのバージョンを確認する php -v出力は次のようになります。 PH...

HTML フローティング フレーム (iframe 読み込み HTML) の設定と使用の例

コードをコピーコードは次のとおりです。 <!DOCTYPE html PUBLIC "...

MySQL 8.0.23 のレプリケーション アーキテクチャにおけるスレーブ ノードの自動フェイルオーバー

私はしばらく MGR と連絡を取り合ってきました。MySQL 8.0.23 の登場により、MySQL...

Centos7 で crontab + シェル スクリプトによる定期的な自動ファイル削除の問題を解決する

問題の説明:最近、rsyncで毎回同期するデータ量が多いが、データベースのbakファイルを保持する必...

Linuxカーネルで中国語の文字を出力する方法

次のように、Windows/MacOS からログインした Linux の SSH ターミナルで簡単に...