본문으로 건너뛰기

Generic

Generic을 이용하면 타입을 직접적으로 고정된 값으로 명시하지 않고, '변수'를 통해 언제든지 변할 수 있는 타입으로 지정할 수 있다.

function add<T>(x: T, y: T): T {
return x + y;
}

add<number>(1, 2); // 3
add<string>('foo', 'bar'); // 'foobar'

Generic 제약​

extends 키워드를 이용해 타입의 종류를 제한할 수 있다.

type numberOrString = number | string;

function add<T extends numberOrString>(x: T, y: T): T {
return x + y;
}

add(1, 2); // 3
add([1, 2], [3, 4]); // Error
정보

interface, class의 extends는 상속의 의미로 '확장'의 의미를 가지지만, generic의 extends는 '제한'의 의미를 가진다는 차이점이 있다.

Generic 함수 타입​

Generic을 이용해서 함수 자체 타입 구조를 정해서 할당 제한이 가능하다.

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

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

let myIdentity: GenericIdentityFn<number> = identity;
let myIdentity2: GenericIdentityFn<string> = identity;

myIdentity(100);
myIdentity2('100');