ジェネリックの定義// 要件 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 をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: Linux+ApacheサーバURLの大文字と小文字の区別の問題を解決する
>>: MySQL における USING と HAVING の使用法の簡単な分析
1.まず、overflow-wrap属性を理解する CSS のoverflow-wrapプロパティは...
ページの DIV+CSS レイアウトを行う際、IE6 で画像要素 img の下に余分なスペースができ...
シンプルなリストビュー効果を実現するHTML結果: CSS スタイル ファイル listviewTe...
並べ替えの場合、order by は非常に頻繁に使用するキーワードです。インデックスに関するこれまで...
MySQLデータベースの接続が多すぎますこのエラーは明らかに、mysql_connect の後に m...
1. HTML ヘッダーにビューポート タグを追加します。ウェブサイトの HTML ファイルの先頭...
1. 設置前によく掃除する rpm -pa | grep mysql または rpm -qa | g...
構文: <marquee> …</marquee>モバイル属性マーキーを使用...
序文:最近、プロジェクトで管理システムに遭遇しました。権限設定が非常に興味深いと思いました。自分の学...
Docker は、次の CentOS バージョンでの実行をサポートしています。 • CentOS 7...
この記事では、VMware Workstation 14 Proにシステムをインストールする方法を紹...
序文この記事では、DBA がいないチームが参考にできるように、MySQL の一般的な使用に関するヒン...
Vue ルーティング this.route.push ジャンプ ページが更新されない1. 背景概要:...
MySQL インデックスの確立は、MySQL の効率的な操作にとって非常に重要です。インデックスによ...
<br />ヘッダーはテーブルの最初の行を参照します。ヘッダー内のテキストは中央揃えで太...