티스토리 뷰

enum

• enum은 열거형 데이터 타입

• 다양한 상수를 보다 이해하기 쉬운 문자열 이름으로 접근하고 사용

• enum안에 있는 각요소는 값이 설정되어 있지 않으면 기본적으로 숫자 0부터 1씩 증가

• enum안에 있는 요소에는 number또는 string타입의 값만 할당 가능

enum UserRole { // string타입의 값을 할당
  ADMIN = "ADMIN",
  EDITOR = "EDITOR",
  USER = "USER",
}

enum UserLevel { // 값을 정해주지 않아 기본값인 0부터 1씩증가
  NOT_OPERATOR, // 0
  OPERATOR // 1
}

function checkPermission(userRole: UserRole, userLevel: UserLevel): void {
  if (userLevel === UserLevel.NOT_OPERATOR) {
    console.log('당신은 일반 사용자 레벨이에요');
  } else {
    console.log('당신은 운영자 레벨이군요');
  } 

  if (userRole === UserRole.ADMIN) {
    console.log("당신은 어드민이군요");
  } else if (userRole === UserRole.EDITOR) {
    console.log("당신은 에디터에요");
  } else {
    console.log("당신은 사용자군요");
  }
}

const userRole: UserRole = UserRole.EDITOR;
const userLevel: UserLevel = UserLevel.NOT_OPERATOR;
checkPermission(userRole, userLevel);

 

object literal(객체 리터럴)

• 키 + 값의 쌍(pair)으로 구성된 객체를 정의하는 방식

• 다양한 데이터 타입을 지원하며 유연한 구조를 가질 수 있음

• 코드 내에서 사용하기 전에 값이 할당되어야 하므로, 런타임 에러를 방지할수 있음

const obj = {
  a: [1,2,3],
  b: 'b',
  c: 4
}

 

유틸리티 타입

Partial<T>

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

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

const person: Person = { name: "Coriny", age: 27 };
const changedPerson = updatePerson(person, { age: 29 });

• Partial<T> 타입은 타입 T의 모든 속성을 선택적으로 만듬.

• 유연하게 타입의 속성을 선택해서 객체를 만들 수 있음.

• 즉, 기존 타입의 일부 속성만 제공하는 객체를 쉽게 생성 가능.

• 위 예제에서 fields 인자가 될수 있는 것

  ° interface Person에서 정의 한 name이라는 속성

  ° interface Person에서 정의 한 age라는 속성

  ° interface Person에서 정의 한 name과 age이라는 속성

  ° 그 외에는 허용 x

 

Required<T>

interface Person {
  name: string;
  age: number;
  address?: string; // ?는 NULL값을 허용 즉, 있어도 되고 없어도됨
}

type RequiredPerson = Required<Person>;

• Required<T> 타입은 타입 T의 모든 속성을 필수적으로 만듬.

• T 타입 객체에 정의된 모든 속성이 반드시 전부 제공이 되는 객체를 생성해야함.

• interface의 Person객체에 ?문자가 뭍어 있더라도 필수적으로 입력해야함.

 

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"; // mutableConfig의 host에는 읽기 전용 속성을 넣지 않아 재할당 가능
immutableConfig.host = "somewhere"; // 오류! 타입의 인터페이스 자체를 읽기 전용속성을 부여하여 재할당 불가

• Readonly<T>타입은 타입 T의 모든 속성을 읽기 전용으로 만듬.

• 이를 통해 readonly타입의 속성들로 구성된 객체가 아니어도 완전한 불변 객체로 취급가능.

 

Pick<T,K>

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

// interface의 Person의 3가지 프로퍼티중에서 name과 age만 선택하여 구성된 새로운 타입
type SubsetPerson = Pick<Person, "name" | "age">;

// 선택한 타입으로 객체 생성
const person: SubsetPerson = { name: "Spartan", age: 30 };

• Pick<T,K> 유틸리티 타입은 타입 T에서 K속성들만 선택하여 새로운 타입을 만듬.

• 타입의 일부 속성만을 포함하는 객체를 쉽게 생성.

 

Omit<T,K>

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

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

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

• Omit <T,K> 유틸리티 타입은 타입 T에서 K속성들만 제외한 새로운 타입을 만듬 

• 기존 타입에서 특정 속성을 제거한 새로운 타입을 쉽게 생성

더 많은 유틸리티 타입

 

 

'프로그래밍 기초 > TypeScript & NestJS' 카테고리의 다른 글

Nest.js TypeORM 사용하기  (1) 2024.03.15
nest개발환경  (0) 2024.03.14
TypeScript 기초 다지기  (1) 2024.03.12
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함