[TIL] Typescript 유틸리티 타입(주요)

김민재·2023년 12월 19일
0

TIL

목록 보기
91/172

Partial(T) >T< 거꾸로

기존 타입의 일부 속성만 제공하는 객체를 쉽게 생성한다.

  • 이 field라는 인자가 구성이 될 수 있는 경우의 수는 다음과 같아요.
    • name이라는 속성만 있어도 됩니다.
    • age라는 속성만 있어도 됩니다.
    • name, age라는 속성이 둘 다 있어도 됩니다.
    • 이 밖의 상황은 허용하지 않아요!
      • 예를 들어, { name, gender }와 같이 기존에 없는 속성을 넣어서는 안됩니다!
interface Person {
  name: string;
  age: number;
}

const updatePerson = (person: Person, fields: Partial<Person>): Person => {
  return { ...person, ...fields };
};

const person: Person = { name: "Spartan", age: 30 };
const changedPerson = updatePerson(person, { age: 31 });

Required(T) >T< 거꾸로

interface Person {
  name: string;
  age: number;
  address?: string; // 속성 명 뒤에 붙는 ?가 뭘까요
}

address는 있어도 되고 없어도 된다. (address?)
type RequiredPerson = Required<Person>;
하게 되면 필수적으로 받아야한다.

Readonly(T) >T< 거꾸로

상수화로 바꿔준다.

interface DatabaseConfig {
  host: string;
  readonly port: number; // 인터페이스에서도 readonly 타입 사용 가능해요!
}

const mutableConfig: DatabaseConfig = {
  host: "localhost",
  port: 3306,
};

const immutableConfig: Readonly<DatabaseConfig> = {
  host: "localhost",
  port: 3306,
};

mutableConfig.host = "somewhere";
immutableConfig.host = "somewhere"; // 오류!

Pick<T,K>

(K)원하는 것만 받겠다.

interface Person {
  name: string;
  age: number;
  address: string;
}

type SubsetPerson = Pick<Person, "name" | "age">;

const person: SubsetPerson = { name: "Spartan", age: 30 };

Omit<T,K>
(K)만 뺀다.

interface Person {
  name: string;
  age: number;
  address: string;
}

type SubsetPerson = Omit<Person, "address">;

const person: SubsetPerson = { name: "Alice", age: 30 };
profile
개발 경험치 쌓는 곳

0개의 댓글

관련 채용 정보