ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 타입을 파라미터로 입력하는 Generic
    Typescript 2022. 6. 17. 15:00
    function 함수<MyType>( x: MyType[] ) :MyType {
      return x[0];
    }
    
    let a = 함수<number>([4,2])
    let b = 함수<string>(['kim', 'park'])

    함수를 만들 때, 함수 이름옆에 <작명>을 붙여주면 함수를 사용할 때, <타입>을 적어주면

    let a = 함수<number>([4,2])
    
    function 함수<MyType>( x: number[] ) :number {
      return x[0];
    }

    이렇게 바뀌게 된다.

     

    Generic 함수를 쓰면  함수를 사용할 때마다 타입을 지정하면 되므로 확장성이 좀 생긴다.

     

    근데,

    function 함수<MyType>(x: MyType) {
      return x - 1
    }
    
    let a = 함수<number>(100)

    이렇게 쓰면, 함수에 값도 숫자로 넣고, number라고 타입지정도 했는데 에러가 뜬다.

    혹시 MyType에 문자가 들어갈까봐 타입스크립트가 걱정해서 미리 에러가 뜨게 되는 것이다.

     

    그래서, Generic 타입에 제한을 할 수 있는데,

    function 함수<MyType extends number>(x: MyType) {
      return x - 1
    }
    
    let a = 함수<number>(100) //잘됩니다

    이렇게, extends를 이용하면 MyType이 number의 속성을 가지고 있는지 체크하게 된다. 그래서 에러가 사라진다.

     

    만약 클래스에 Generic타입을 쓰려면

    class Person <T> {
      name;
      constructor(a :T){
        this.name = a;
      }
    }
    let a = new Person<string>('어쩌구');

    클래스 이름에 <작명>을 붙여주고 constructor에 :작명을 붙여주면 

    인스턴스를 만들 때, <>를 붙여줄 수 있게된다. 이러면 저기에 넣는 타입마다 a의 타입이 바뀌게 된다.

    'Typescript' 카테고리의 다른 글

    array에 붙이는 tuple type  (0) 2022.06.17
    React와 Typescript 사용  (0) 2022.06.17
    타입 import/export와 namespace  (0) 2022.06.17
    protected, static  (0) 2022.06.17
    객체지향언어같은 문법제공(public, private)  (0) 2022.06.17

    댓글

Designed by Tistory.