Typescript Day 09 - 제네릭
22 Jun 2021 | TypescriptTypescript Day 09 - 제네릭
제네릭 타입
제네릭 타입은 인터페이스나 클래스, 함수, 타입 별칭 등에 사용할 수 있는 기능으로, 타입을 미리 지정하지 않고 다양한 타입에 대응하려 할 때 사용한다.
제네릭은 타입변수라고도 부른다. 타입 자체를 파라미터처럼 받아서 사용이 가능하다.
제네릭은 일반적으로 대문자로 적는것이 관례이다.
// 제네릭 인터페이스
interface IValue<T> {
value: T
}
// 제네릭 함수
function sum<T>(arg: T): T {
return arg
}
// 제네릭 타입 별칭
type IValue<T> = {
value: T
}
// 제네릭 클래스
class Value<T> {
constructor(public value: T){}
}
// 제네릭 사용 예시
function identity<T>(arg: T): T {
return arg;
}
let output = identity<string>('hello world'); // hello world
let output = identity('hello world'); // 타입 추론도 가능하다
제네릭 타입 제약
제네릭 타입 제약은 타입 변수에 적용할 수 있는 타입의 범위를 한정하는 기능을 한다.
<최종타입 extends 타입1>(a: 최종타입){}
interface IValuable {
length: number
}
const printValue = <T extends IValueable>(arg: T) => console.log(arg.length);
printValue(3); // Error: number는 length 프로퍼티가 없다
printValue({length: 10}); // 10
인덱스 타입 제약
타입 매개변수로 다른 타입 매개변수를 제한할 수 있다.
function getProperty<T, K extends keyof T>(obj: T, key: K) {
return obj[key];
}
let x = { a: 1, b: 2, c: 3 };
getProperty(x, "a"); // 1
getProperty(x, "z"); // Error: 'z'가 해당되는 인수가 없다