TIL | TypeScript()

·2023년 7월 26일

TIL # WIL

목록 보기
36/65

23.07.26

알고리즘

splice() 메서드
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/splice

sort는 원본 배열의 영향을 줌

Number() 로 해주면 true === 1 ; false === 0;

filter는 값이 없으면 빈배열을 반환해줘서
삼항연산자를 사용하면 true가 나옴

TypeScript

4-1 enum과 object literal 비교

enum은 열거형 데이터 타입 / 가독성을 높여주기도 하고 명확한 상수 값을 정의할 수 있어서 상수(재할당 불가능한 타입)의 그룹화할 때 사용하면 좋음 (* 컴파일 시 따로 데이터를 할당하지 않았다면 자동으로 숫자 값(1 or 0)이 매핑됨)

object literal

  • enum과 비슷하지만 키워드가 enum이 아닌 const(or let)을 사용
  • 객체처럼 키-값 쌍(pair)으로 구성된 객체를 정의하는 방식

enum과 비교해 object literal이 갖는 장점
1. enum은 number나 string 타입의 데이터만 대입할 수 있으나 객체 리터럴에서는 어떤 타입의 데이터든 대입할 수 있어 유연한 구조를 갖고 있음
2. 코드 내에서 사용하기 전에 할당되어야 해서 런타임 에러를 방지할 수 있음

enum과 object literal의 더 적합한 사용법

enum : ‘간단한’ 상수 값을 그룹화해서 관리할 때 적합
각 멤버의 데이터 타입들이 모두 상수 값이기 때문에 각 데이터 값이 변하면 안됨

object literal : 멤버의 값이나 데이터 타입을 마음대로 변경 가능 (즉, 상수뿐만 아니라 변수도 가능)
enum보다 복잡한 구조와 다양한 데이터 타입을 사용해야 할 때 사용하면 적합

4-2 ~ 4-3 유틸리티 타입

  1. Partial : 타입 T에 대한 모든 속성을 선택적으로 만듦 => 이를 통해 기존 타입의 일부 속성만 제공하는 객체를 쉽게 생성할 수 있음 (= name or age 둘 중에 하나의 속성만 있어도 ㄱㅊ)
  • 그러나 기존에 없는 속성은 당연히 추가할 수 없음

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

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

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

  1. Required : Partial 과는 반대로 Required 타입은 모든 속성을 반드시 필수적으로 제공하여 생성해야함

interface Person {
name: string;
age: number;
address?: string; // ?는 선택적 속성 : 있어도 되고 없어도 됨
}

그러나 address를 type RequiredPerson = Required; 이런식으로 Required 타입으로 선언하면 무조건 필수로 입력해야함

  1. Readonly : 이름에서 유추되듯이 모든 속성을 읽기 전용으로 만듦 => 즉, 불변 ‘객체’로 만들 수 있음

그렇다면 여기서 불변 객체란 ? 객체 생성 후 내부의 상태를 바꿀 수 없는 객체를 의미

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

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

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

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

  • 기존의 DatabaseConfig는 불변 객체라고 할 수 없음. 왜냐하면 host가 readonly가 아니라서
  • 하지만, ReadOnly 타입으로 불변 객체로 만들어서 객체 내부 상태의 값을 변경할 수 없게 할 수 있음
  1. 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 };

Person에는 address가 포함되어있지만 만약 address 속성을 제외하고 새로운 타입의 객체를 만들고 싶다면 ??
=> 위처럼 작성하면 name과 age 속성만 포함하는 객체를 만들어줄 수 있음

  1. Omit<T, K> : Pick과는 반대로 특정 속성을 제거한 나머지 속성들로 새로운 타입의 객체를 생성하는 것

ꖶዞ 사용하냐면 ? 만약 속성이 30개 있는데 사용하고 싶은 속성은 27개고 사용하지 않을 속성이 3개라면 3개를 제외하고 새 타입의 객체를 생성하는 것이 효율적이기 때문에 !!

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

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

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

추가적인 유틸리티 타입들 …
https://www.typescriptlang.org/ko/docs/handbook/utility-types.html

4-4 ~ 4-7 프로그램 실습

(오류)
./dist 폴더가 없어서 nam run start에서 오류가 남

--outDir ./dist
컴파일이 된 파일들이 들어가는 디렉토리는 dist 디렉토리입니다.
// 이거를 해주지 않아서 그랬음

vscode 확인 !!!!!!!!!!!!!!!!!!!

0개의 댓글