TypeScript - Generic


Generic

  • Genericは、パラメータでタイプを渡す方法です.
  •   function 함수<MyType, MyType2>(x: MyType[], y: MyType2[]): MyType {
        return x[0];
      }
      let x = 함수<number, string>([1, 2], ["3", "4"]);
  • genericを使用すると、狭窄を低減できます.
    関数に値を入力した場合、タイプスクリプトは自分で変更されません.戻り値が不明な場合は、実際にnumberタイプを返しても演算にエラーが発生する可能性があります.したがって、genericを縮小または使用します.
  •   // Generic 사용하지 않았을 때
      function 함수(x: unknown[]) {
        return x[0];
      }
      let a = 함수([1, 2]);
      // a의 타입은 number가 아니라 unknown
      // 연산 하려면 narrowing 해야함
      console.log(a + 1);  // 에러
    
      // Generic을 사용했을 때
      function 함수2<MyType>(x: MyType[]): MyType {
        return x[0];
      }
      let b = 함수2<number>([1, 2]);
      console.log(b + 1);

    Constraints


    Genericタイプの制限を設定できます.
      function 함수<MyType extends number>(x: MyType): number {
        // 연산할 때 narrowing 할 필요 없음
        return x + 1;
      }
    下図のようにカスタムタイプにも適用されます
      interface LengthCheck {
        length: number;
      }
    
      function 함수<MyType extends LengthCheck>(x: MyType): number {
        // 연narrowing 할 필요 없음
        return x.length;
      }

    クラスでのGenericの使用


    クラスでgenericを使用する場合は、クラス名の右側にタイプを記入します.
      class 클래스<T> {
        name;
        constructor(a: T) {
          this.name = a;
        }
      }
    
      let a = new 클래스<string>("John");
      console.log(typeof a.name);  // 출력: string