[타입스크립트] TypeScript의 제너릭(Generic)
4591 단어 typescripttypescript
제너릭(Generic)
재사용을 목적으로 함수나 클래스의 선언 시점이 아닌, 사용 시점에 타입을 선언할 수 있는 방법을 제공한다.
// 함수의 선언 시점
function array(a: number, b: number): number[] {
return [a, b];
}
array(1, 2); // [1, 2]
array('1', '2'); // Argument of type 'string' is not assignable to parameter of type 'number'.
// 함수의 사용 시점
function array<T>(a: T, b: T): T[] {
return [a, b];
}
array<number>(1, 2); // [1, 2]
array<string>('1', '2'); // ['1', '2']
array<number | string>(1, '2'); // [1, '2']
array(1, 2); // [1, 2]
array('1', '2'); // ['1', '2']
array(1, '2'); // Argument of type 'string' is not assignable to parameter of type 'number'.
interface에 Generic 사용하기
interface IType<T> {
name: string,
value: T
}
T 자리에 원하는 타입을 넣어서 사용할 수 있다.
const dataA: IType<string> = {
name: 'miniddo',
value: 'velog'
}
const dataB: IType<number> = {
name: 'miniddo',
value: 20
}
const dataC: IType<number[]> = {
name: 'miniddo',
value: [1, 2, 3, 4, 5]
}
interface에 제약 조건 걸어서 Generic 사용하기
interface IType<T extends string | number> {
name: string,
value: T
}
or
type U = string | number;
interface IType<T extends U> {
name: string,
value: T
}
T 에는 string과 number 타입만 사용할 수 있다.
const dataA: IType<string> = {
name: 'miniddo',
value: 'velog'
}
const dataB: IType<number[]> = { // Type 'number[]' does not satisfy the constraint 'string | number'
name: 'miniddo',
value: [1, 2, 3, 4, 5]
}
Type Alias
도 interface 처럼 제너릭을 사용할 수 있다.
type U = string | number;
type IType<T extends U> = string | T;
type IType<T extends U> = {
name: string,
value: T
};
참고 사이트
https://heropy.blog/2020/01/27/typescript/
Author And Source
이 문제에 관하여([타입스크립트] TypeScript의 제너릭(Generic)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@minidoo/타입스크립트-TypeScript의-제너릭Generic저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)