▶ 1. 문자/ 숫자/ 불린 기본타입
const getPrimitive = (arg1: string, arg2: number, arg3: boolean): [boolean, number, string] => {
return [arg3, arg2, arg1];
};
const result1 = getPrimitive("철수", 123, true);
// typeof result1[0] // boolean
// typeof result1[1] // number
// typeof result1[2] // string
▶ 2. any 타입 (그냥 JS와 같음, 사용 지양)
const getAny = (arg1: any, arg2: any, arg3: any): [any, any, any] => {
console.log(arg1 + 100); // any는 아무거나 다 됨
return [arg3, arg2, arg1];
};
const result2 = getAny("철수", 123, true);
▶ 3. unknown 타입 (any보다는 안전함, 알려지지 않은 아이니까 정확하게 알고 써야한다.)
const getUnknown = (arg1: unknown, arg2: unknown, arg3: unknown): [unknown, unknown, unknown] => {
// console.log(arg1 + 100); // 사용할 수 없음
if (typeof arg1 === "number") console.log(arg1 + 100);
return [arg3, arg2, arg1]; // any는 아무거나 다 된다
};
const result3 = getUnknown("철수", 123, true);
▶ 4. generic 타입 - 1 (비교적 안전한 any)
function getGeneric1<MyType1, MyType2, MyType3>(arg1: MyType1, arg2: MyType2, arg3: MyType3): [MyType3, MyType2, MyType1] {
return [arg3, arg2, arg1]; // any는 아무거나 다 된다
}
const result4 = getGeneric1("철수", 123, true);
// typeof result4[0] // string
// typeof result4[1] // number
// typeof result4[2] // boolean
▶ 5. generic 타입 - 2 (비교적 안전한 any)
function getGeneric2<T1, T2, T3>(arg1: T1, arg2: T2, arg3: T3): [T3, T2, T1] {
return [arg3, arg2, arg1]; // any는 아무거나 다 된다
}
const result5 = getGeneric2("철수", 123, true);
// typeof result4[0] // string
// typeof result4[1] // number
// typeof result4[2] // boolean
▶ 6. generic 타입 - 3 (비교적 안전한 any)
function getGeneric3<T, U, V>(arg1: T, arg2: U, arg3: V): [V, U, T] {
return [arg3, arg2, arg1]; // any는 아무거나 다 된다
}
const result6 = getGeneric3("철수", 123, true); // 타입을 추론해준다
// typeof result4[0] // string
// typeof result4[1] // number
// typeof result4[2] // boolean
▶ 7. generic 타입 - 4 (화살표 함수)
const getGeneric4 = <T, U, V>(arg1: T, arg2: U, arg3: V): [V, U, T] => {
return [arg3, arg2, arg1];
};
const result7 = getGeneric4<string, number, boolean>("철수", 123, true); // generic에서 미리 타입 명시하기 < >
// typeof result4[0] // string
// typeof result4[1] // number
// typeof result4[2] // boolean
interface IProfile {
name: string;
age: number;
school: string;
hobby?: string;
}
type aaa = Partial<IProfile>;
type bbb = Partial<IProfile>;
type ccc = Pick<IProfile, "name" | "age">;
type ddd = Omit<IProfile, "school">;
type eee = "철수" | "영희" | "훈이"; // Union 타입
let child1: eee = "영희"; // 철수, 영희, 훈이만 가능
let child2: string = "사과"; // 철수, 영희, 훈이, 사과, 바나나 등 모두 가능
type fff = Record<eee, IProfile>; // 철수: boolean; 영희: boolean; 훈이: boolean;
type ggg = keyof IProfile;
let myprofile: ggg = "hobby";
interface IProfile {
candy: number; // 선언병합으로 추가됨
}
let profile: Partial<IProfile> = {
candy: 10,
};
몽고DB는 유연하지만 안정성은 떨어진다.
MYSQL은 안정적이지만 유연성은 떨어진다.
출처 : 코드캠프