제네릭(Generics)
제네릭이란 함수를 정의할때 타입을 정해 주는 것이 아니라, 함수가 동작할때 타입이 정해지도록 하는 것이다.
밑에 코드에서 T가 제네릭 타입으로 함수를 정의할때 T라는 변수로 사용하고 함수가 동작할때에 맞춰서 타입이 정해진다.
function re<T>(arg: T):T {
return arg;
}
re('string');
re(123);
re(true)
제네릭 선언 위치는 다음과 같다.
function a<T>() {}
class B<T>() {}
interface C<T> {}
type D<T> = {};
const e = <T>() => {};
제네릭 제약조건(Generic Constraints)
제네릭 타입을 사용해서 함수 동작시에 맞춰서 타입이 정해지지만, 원하는 타입만 입력 받고 싶다면, extends를 사용하면 된다.
function re<T extends string | number>(arg: T): T {
return arg;
}
re(100) // okay
re('string') // okay
re(true) // error
타입을 제한 하는 경우는 다음과 같다.
function re<T extends {a:number}>(arg: T): T {
return arg;
}
re({a:10})
function reArr<T extends string[]>(arg: T) : T {
return arg;
}
re2(['a','b'])
function reFun<T extends (...args: any) => any>(arg: T) : T {
return arg;
}
reFun( (name) => {console.log(name)} );
function reCla<T extends abstract new (...args: any) => any> (arg: T) : T {
return arg;
}
class A {
name = 'class';
}
reCla(A);
'Language > TypeScript' 카테고리의 다른 글
#8 TypeScript Utility Types (0) | 2023.09.06 |
---|---|
#7 TypeScript Optional, callback의 매개변수 (0) | 2023.09.02 |
#5 TypeScript 클래스(Class) (0) | 2023.09.01 |
#4 TypeScript 타입 추론(Inference), 단언(Assertion), 가드(Guard) (0) | 2023.08.30 |
#3 TypeScript 타입의 생성 (0) | 2023.08.30 |