Generic 타입

김선우·2022년 6월 14일
0

Posting

목록 보기
22/60
// 1. 문자타입
const getString = (args: string): string => {
  return args;
};

const result1 = getString("선우");

// 2. 숫자타입
const getNumber = (args: number): number => {
  return args;
};

const result2 = getNumber(123);

// 
// 
// 3. any 타입
const getAny2 = (args: any): any => {
    return args;
  };
  const result3_1 = getAny2("철수");
  const result3_2 = getAny2(8);
  const result3_3 = getAny2(true);

//   
// 
// 4. any 타입 2
const getAnys = (arg1: any, arg2: any, arg3: any): [any, any,any] => {
    return[arg3, arg2, arg1]
}

const result4 = getAnys("철수", true, 123)

// 
// 
// 56. generic 타입 (들어온 타입을 그대로 사용)

function getGeneric<MyType>(arg: MyType): MyType{
    return arg
}

const aaa: string = "선우"
const bbb: number = 8
const ccc: boolean = false
const result5_1 = getGeneric(aaa)
const result5_2 = getGeneric(bbb)
const result5_3 = getGeneric(ccc)

타입 선언을 해주면(MyType), 들어간타입 그대로 사용함.

인자가 여러개 들어가는 경우, <> 로 묶어서 나타내준다.

function getGenerics<MyType1, MyType2, MyType3>
(arg1: MyType1, arg2: MyType2, arg3: MyType3)
: [MyType3, MyType2, MyType1]{
    return[arg3, arg2, arg1]
}

const result6 = getGenerics("철수", true, 123)

generic의 장점은, any와는 다르게 타입 추론(예측)이 된다.
(본인이 타입을 만들 수 있다, any의 안전한 버전.)

하지만 타입명이 너무 길 수도 있기 때문에,, 실무에선 아래와 같이 쓴다.

// 1. generic 축약 1
function getGenericsT<T1, T2, T3>(arg1: T1, arg2: T2, arg3: T3): [T3, T2, T1]{
    return[arg3, arg2, arg1]
}

const result7 = getGenerics("철수", true, 123)
// 
// 
// 
// 2. generic 축약 2
function TUV<T, U, V>(arg1: T, arg2: U, arg3: V): [V, U, T]{
    return[arg3, arg2, arg1]
}

const result8 = getGenerics("철수", true, 123)

// 그냥 변수 이름을 줄인 형태이긴 하다.
// node_modules 에서 간간히 찾아볼 수 있음. 
// useState 에서의 generic
//  state 타입 선언 시 useState옆에 <>로 묶어서 타입명시
const [ttt, setTtt] = useState<number>(222)
profile
생각은 나중에..

0개의 댓글