ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 유틸리티 타입 (TS)
    카테고리 없음 2023. 12. 20. 12:26

    Partial<T>

     

    일부 속성만 제공하는 객체

    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>

     

    모든 속성이 전부 제공되는 객체를 생성해야한다.

     

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

     

    위와같이 NAME, AGE, ADRESS 모두가 들어가는 속성 객체를 생성해야하는데

     

    ADDRESS 뒤에 ?가 붙으면서 ADRESS는 있어도 없어도괜찮다인데


     

    type RequiredPerson = Required<Person>; 이런 식으로 

     

    REQUIRE 해주면 

     

    NAME, AGE, ADDRESS가 모두 붙어야 한다. 

     


     Readonly<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"; // 오류!

     

    READONLY로 PORT을 설정하면 PORT외에  HOST는 가변성이다.

     

    아래의 immutableConfig: Readonly은 객체를 리드온리해서 불변의 속성을 만들었다.


    Pick<T, K>

     

    타입 T에서 K 속성들만 선택하여 새로운 타입

     

    찍먹하는것

     

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

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

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

     

    이런식으로 타입을 지정해주고 그중 K속성을 PICK해서 쓰는것이다. 

    위와같이 NAME AGE을 픽해서 받을 수 있다.


    Omit<T, K>

     

    생략하고 스킵하는 타입

     

    타입 T에서 K 속성들만 제외한 새로운 타입을

     

    예를들어 속성이 30개면 3개를 빼야한다면 27개를 픽하는것보다 3개를 OMIT하는게 빠를거다

     

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

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

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

     

    이런 식으로 OMIT<PERSON, "ADDRESS"> 오밋해주면 어드레스를 빼는 객체를 생성할 수 있다.

Designed by Tistory.