유틸리티 타입

keyof


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

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

const uk: UserKey = "name";


Partial<T>


모든 프로퍼티를 옵션으로 바꾸어준다.

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

let admin: User = {
  id: 1,
  name: "Bob",
}; // err - age가 없다

let admin: Partial<User> = {
  id: 1,
  name: "Bob",
};

/*
interface User {
  id?: number;
  name?: string;
  age?: number;
}
처럼 작용한다.*/


Required<T>


모든 프로퍼티를 필수로 바꾸어준다.

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

let admin: Required<User> = {
  id: 1,
  name: "Bob",
}; // err - age를 넣어주어야함


Readonly<T>


읽기 전용으로 바꾸어준다.

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

let admin: Readonly<User> = {
  id: 1,
  name: "Bob",
};

admin.id = 4; // err


Record<K, T>


K는 key, T는 type.

interface Score {
  1: "A" | "B" | "C";
  2: "A" | "B" | "C";
  3: "A" | "B" | "C";
  4: "A" | "B" | "C";
}
const score: Score = {
  1: "A",
  2: "C",
  3: "B",
  4: "B",
};

의 형태를 Record를 사용하면

const score: Record<"1" | "2" | "3" | "4", "A" | "B" | "C"> = {
  1: "A",
  2: "C",
  3: "B",
  4: "B",
};

이렇게 만들 수 있고

type Grade = "1" | "2" | "3" | "4";
type Score = "A" | "B" | "C";

const score: Record<Grade, Score> = {
  1: "A",
  2: "C",
  3: "B",
  4: "B",
};

처럼 만들 수 있다.


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

function isValid(user: User) {
  const result: Record<keyof User, boolean> = {
    is: user.id > 0,
    name: user.name !== "",
    age: user.age > 0,
  };
  return result;
}


Pick<T, K>


T 타입에서 K 프로퍼티만 골라서 사용.

interface User {
  id: number;
  name: string;
  age: number;
  gender: "M" | "W";
}

const admin: Pick<User, "id" | "name"> = {
  id: 0,
  name: "Bob",
};


Omit<T, K>


T 타입에서 K 프로퍼티만 빼고 사용.

interface User {
  id: number;
  name: string;
  age: number;
  gender: "M" | "W";
}

const admin: Omit<User, "age" | "gender"> = {
  id: 0,
  name: "Bob",
};


Exclude<T1, T2>


T1에서 T2와 겹치는 부분을 제외하고 사용.

type T1 = string | number | boolean;
type T2 = Exclude<T1, number | string>; // type T2 = boolean


NonNullable


null과 undefined를 제외한 타입을 생성한다.

type T1 = string | null | undefined | void;
type T2 = NonNullable<T1>; // type T2 = string | void


type Member = {
  [key: string]: string;
};
let john: Member = { name: "kim" };

모든 object 속성에 대해 key값이 string으로 입력이된다면 value가 string으로 입력되어야한다.

댓글남기기