Type Script汎型

2603 ワード

汎型の概念
あらかじめ定められていないデータの種類を指し、具体的なタイプは使う時に決められます.ちょっとお聞きしたいのですが、JavaScript自体はこのように感じられますか?これは理解が間違っているからです.前に「使用時に確定する」と言っていますが、プログラム実行時に確定するのではありません.
汎関数
必要なものがあります.定義された関数は元々入力文字列出力文字列で、入力出力文字列配列を同時にサポートしたいです.どうやって実現しますか?
1.関数での再ロード
//                 
function log(value: string): string; 
function log(value: string[]): string[];
 
function log(value: any): any{
    console.log(value);
    return value;
}
log("abc");
log(["10","abc"]);
2.連携パラメータを使用する
function logs(value: string | string[]): string | string[]{
    return value
}
以上の二つはOKですが、簡潔さが足りなくて、柔軟性が足りません.以下は汎型を使います.
function log1(value: T): T{
    return value
}
   
let log1 = (value: T) => {
    return value
};
log1("hello");   //          
log1(["hi","ha"]);
コアインターフェース
//       ,            ,            
interface Log {
    (value: T): T;
}
let log3: Log = (v) => { console.log("      ",v);return v };
log3(12);
 
interface Log{
    (value: T): T;
}
let log3: Log = (v) => { console.log("      ",v);return v};
log3(10); //       ,       ,        
log3(5);
汎型類
クラスのメンバーを制約し、静的なメンバーを拘束しないように注意する.
class Log {
   run(value: T) {
      console.log(value);
      return value
   }
}
let log1 = new Log(); //       
log1.run(1);
let log2 = new Log(); //         
log2.run("2");
汎型制約
一般的な制約とは、着信パラメータが制約に適合していなければならず、制約に適合していないパラメータが着信できないことをいう.
function log(value: T):T{
   console.log(value.length); //     .length  ,TS      ,     value       
   return value
}
        
interface Length {
   length: number;
   type?: string;
}
// extends Length    value    .     Length      
function log(value: T): T{
   console.log(value, value.length,value.type);
   return value
}
//     length    ,          log  
log([1,2,3]);
log("123");
log({length: 1});
この例では、着信を制約するパラメータは、length属性を持たなければならない.
汎型を使うとどんなメリットがありますか?
  • 関数およびクラスは、様々なタイプをサポートし、プログラムの拡張を強化することができる.
  • は、複数の関数を書き換える必要がなく、長いタイプの共同声明でコードの読み取り可能性を向上させる.
  • フレキシブル制御タイプ間の制約