티스토리 뷰
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 |