[TS] 제네릭

ClassBinu·2024년 3월 27일

제네릭

제네릭: 타입을 파라미터로 받아서 다양한 타입에 대해 작동할 수 있는 컴포너트(클래스, 인터페이스, 함수)를 정의할 수 있는 기능

function identity<t>(arg: T): T {
  return arg;
}

// 호출 1
let output = identity<string>("myString");

// 호출 2
// 타입 추론을 통해 "myString"을 보고 스트링을 T로 추론함.
let output = identity("myString");

제네릭은 타입을 캡처한다. 즉, 제네릭 = 타입 변수

제네릭 타입

function identity<T>(arg: T): T {
  return arg;
}

let myIdentity: <T>(arg: T) => T = identity;

// T가 아니라 다른 매개변수 이름 사용 가능(예를 들어 U)
let myIdentity: <U>(arg: U) => U = identity;

함수 호출 시그니처 작성

interface GenericIdentityFn {
  <T>(arg: T): T;
}

function identity<T>(arg: T): T {
  return arg;
}

let myIdentity: GenericIdentityFn = identity;

제네릭 클래스

class GenericNumber<T> {
    zeroValue: T;
    add: (x: T, y: T) => T;
}

let myGenericNumber = new GenericNumber<number>();
myGenericNumber.zeroValue = 0;
myGenericNumber.add = function(x, y) { return x + y; };

0개의 댓글