📌 keyof

keyof를 사용하면, interface의 key 값들을 union 형태로 받을 수 있다.

interface User {
  id: number;
  name: string;
  age: number;
  gender: "m" | "f"
}

type UserKey = keyof User; // 'id' | 'name' | 'age' | 'gender'

❌
const uk1:UserKey = "cat"

⭕️
const uk2:UserKey = "id"

User interface에 있는 key의 값으로 할당해야한다.

📌 Partial<T>

property를 모두 optional로 바꿔준다.

interface User {
  id: number;
  name: string;
  age: number;
  gender: "m" | "f"
}

let admin: Partial<User> = {
  id: 1,
  name: "Tom",
  age: 1,
}

//Partial<User>로 지정한 admin은 아래와 같다.
// interface User {
//   id?: number;
//   name?: string;
//   age?: number;
//   gender?: "m" | "f"
// }

❌
let admin: Partial<User> = {
  id: 1,
  name: "Tom",
  age: 1,
  job: "dev"
}
//job은 User에 선언되지 않은 type이기 떄문에 쓸 수 없다.

📌Required<T>

모든 property를 필수값으로 바꿔준다.

interface User {
  id: number;
  name: string;
  age?: number;
}

let admin1: User = {
  id: 1,
  name: "Bob",
}

required type을 지정하지 않는다면, type 에러가 나지 않겠지만,

interface User {
  id: number;
  name: string;
  age?: number;
}

❌
let admin: Required<User> = {
  id: 1,
  name: "Bob",
}

⭕️
let admin: Required<User> = {
  id: 1,
  name: "Bob",
  age: 10,
}

User의 age를 옵셔널 type으로 지정했지만,

interface User의 모든 값을 입력해줘야한다.

📌Readonly<T>

property를 읽기 전용으로 바꿔준다.