// 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)