728x90
interface IProfile {
  name: string;
  age: number;
  school: string;
  hobby?: string;
}

// 아래 type들에 마우스 올려보면 어떻게 변경되었는지 확인 가능!!

// 1. Partial 타입 => 내용 전부 ?타입(있어도 되고 없어도 되고) 만듦
type aaa = Partial<IProfile>;

// 2. Required 타입 => 내용 전부 있어야 되는걸로 만듦
type bbb = Required<IProfile>;

// 3. Pick 타입 => 필요한것만 가져다 만듦
type ccc = Pick<IProfile, "name" | "age">;

// 4. Omit 타입 => 필요없는것 제외해서 만듦
type ddd = Omit<IProfile, "school">;

// 5. Record 타입
type eee = "철수" | "영희" | "훈이"; // Union 타입 => 지정해놓은것만 대입 가능
let child1: eee = "철수"; // => eee에 지정해놓은 것 (철수,영희.훈이)만 됨
let child2: string = "사과"; // => 아무거나(철수,영희,사과,바나나)다 됨

type fff = Record<eee, number>; // Record 타입 => eee의 내용들의 타입을 정의해줌
type ffff = Record<eee, IProfile>;

// 6. 객체의 key들로 Union 타입 만들기
type ggg = keyof IProfile; // = "name" | "age" | "school" | "hobby"
let myprofile: ggg = "hobby";

// 7. type vs interface 차이    => interface는 선언병합 가능
interface IProfile {
  candy: number; // 선언 병합으로 추가됨
}

// 8. 배운것 응용 => candy만 쓰면 나머지 필수입력 없어서 에러나니깐 Partial씀
let profile: Partial<IProfile> = {
  candy: 10,
};

// ++ 특정한 녀석 ?타입으로 바꾸기
interface AAAAAAA extends Omit<IProfile, "school"> {
  school?: string;
}

 

728x90

'코딩 > TypeScript' 카테고리의 다른 글

Overloading  (0) 2024.10.30
const  (0) 2024.10.30
enum  (0) 2024.10.30
gerneric  (0) 2024.03.17
tsconfig.json  (0) 2024.03.16

+ Recent posts