TypeScript-02

EUNHEE·2023년 5월 31일

TypeScript의 열거형(Enum)

특정 값의 집합을 정의할 때 사용
JavaScript에서는 기본적으로 열거형을 지원하지 않지만, TypeScript에서는 문자형 열거형과 숫자형 열거형을 지원한다.


숫자형 열거형(Enum)

디폴트 값으로 숫자형을 사용하며, 각 값은 자동으로 0부터 시작하여 1씩 증가한다. 그러나 다음과 같이 수동으로 값을 지정할 수도 있다.

enum Color {
  Red = 1,
  Green = 2,
  Blue = 4,
}
  
  

//열거형의 값에 대해 산술 연산을 수행할 수도 있다.
enum Color {
  Red = 1,
  Green = 2,
  Blue = 4,
}

let c: Color = Color.Green;
let greenValue: number = Color.Green;
let blueValue: number = Color.Blue;

console.log(c);          // 출력: 2
console.log(greenValue);  // 출력: 2
console.log(blueValue);   // 출력: 4

역 매핑 (Reverse mappings)

숫자형 열거형에만 존재.
열거형의 키(key)로 값(value)을 얻을 수 있고 값(value)으로 키(key)를 얻을 수도 있다.

enum Enum {
    A
}
let a = Enum.A;
let nameOfA = Enum[a]; // "A"

문자형 열거형(Enum)

enum Direction {
  Up = "UP",
  Down = "DOWN",
  Left = "LEFT",
  Right = "RIGHT",
}

let myDirection: Direction = Direction.Up;
console.log(myDirection); // 출력: "UP"



TypeScript의 타입 별칭(Type Aliases)

타입의 새로운 이름을 만드는 것(새로운 이름으로 기존의 타입을 참조하는 것을 의미)

type MyString = string;

let str1: string = 'hello!';

// string 타입처럼 사용할 수 있습니다.
let str2: MyString = 'hello world!';

타입 별칭을 사용하면 코드를 더 간결하고 가독성 좋게 만들 수 있다. 또한 복잡한 타입을 간략하게 표현하고, 타입 정의를 재사용하는 등 가독성을 높일 수 있다.

인터페이스 vs 타입 별칭

type Person = {
    name: string;
    age: number;
}

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

//에러가 발생합니다.
type Students extends Person {
    className: string;  
}

//정상적으로 동작합니다.
interface Students extends User {
	 className: string;   
}

//정상적으로 동작합니다.
interface Students extends Person {
    className: string;  
}

사용목적

  • 인터페이스 : 객체 구조 정의
  • 타입별칭 : 다영한 타입 이름 참조

활용성

  • 인터페이스 : 객체를 구성하고 프로퍼티, 메서드 명시하고 유지에 유용
  • 타입별칭 : 복잡한 타입 단순화, 공통적으로 사용되는 타입 중복 없이 정의


TypeScript의 타입 추론(Type Inference)

변수나 함수의 타입을 선언하지 않아도 TypeScript가 자동으로 유추하는 기능

타입 추론(Type Inference)의 기본

let isNumber = 123;
//isNumber의 타입을 자동으로 숫자(Number)로 추론

최적 공통 타입 (Best common type)

let x = [0, 1, null];
//여러 표현식에서 타입 추론이 발생할 때, 해당 표현식의 타입을 사용하여 "최적 공통 타입"을 계산

문맥상의 타이핑(Contextual Typing)

function add(a, b) {
  return a + b;
}
//매개변수 a와 b의 타입을 자동으로 추론
//만약 매개변수 a와 b가 모두 숫자(Number) 타입이라면, add 함수의 반환 값도 숫자(Number) 타입으로 추론

타입 추론의 장점

  1. 코드의 가독성 향상
  2. 개발 생산성 향상
  3. 오류 발견 용이성

타입 추론의 단점

  1. 타입 추론이 잘못될 경우 코드 오류 발생.
    타입 추론은 TypeScript가 자동으로 수행하는 것이기 때문에, 추론이 잘못될 경우 코드 오류가 발생할 수 있다.
  2. 명시적인 타입 지정이 필요한 경우가 있다.
    타입 추론만으로는 부족한 경우가 있다. 특히, 복잡한 함수나 객체의 경우에는 명시적인 타입 지정이 필요할 수 있다.

0개의 댓글