# 타입 별칭

# 타입 개념

  • 타입 별칭(alias)은 새로운 타입을 정의 합니다.
  • 개발자의 의도를 명확하게 구분할 수 있습니다.
  • 타입 이외의 값으로 변경할 수 없습니다.

# 리터럴 개념

  • 리터럴이란 값에 값을 명시적 지정하는 것을 의미하며 타입과 상당히 유사합니다. 사전적 의미로는 문자 자체의, 문자 그대로를 뜻 합니다. 즉 소스코드에 직접적으로 표현된 것을 의미하며 데이터 값을 표현하는 방식이라고 말합니다.
123; // number literal
("string"); // string literal
true, false; // boolean literal
null; // null literal
undefined; // undefined literal
{
} // object literal

# 타입을 정의하는 방법

  • valu1, value2, value3 의 타입은 string, number, boolean, object, array, undefined, null, interface 등으로 사용이 가능합니다. 여러개의 타입을 추가하실 경우에는 union type(|)으로 추가가 가능합니다.
type variable_name = value1 | value2 | value3;

# String Types

  • COLOR 타입에 4가지 데이터를 지정하였습니다. 색상을 입력할 때 4가지 색상 이외의 값을 입력하면 오류가 발생합니다.
type COLOR = "red" | "orange" | "yellow" | "green";

let color1: COLOR = "red"; // success
let color2: COLOR = "blue"; // failed 다른 값으로 변경하는 것이 불가능합니다.

# Number Types

  • 숫자형 리터럴 타입도 사용이 가능합니다. 아래 처럼 사용을 해도 되고 주로 크기와 관련된 값을 설정할 때 사용합니다.
type RETURN_VALUE = -1 | 0 | 1;

function compare(a: number, b: number): RETURN_VALUE {
  if (a < b) {
    return -1;
  }
  if (a > b) {
    return 1;
  }
  // a must be equal to b
  return 0;
}

# Boolean Types

type SHOW = true | false;
function isShow(a: number): SHOW {
  return a > 10;
}

# Object Type

type myAction =
  | { type: "COUNT", count: number }
  | { type: "EAT", food: string }
  | { type: "READ", book: string };

# Function Type

type Func = (() => number) | (() => void);

# Interface Type

interface Apple {
  color: string;
  isSweet: boolean;
}

interface Banana {
  color: string;
  isSweet: boolean;
}

interface Orange {
  color: string;
  isSweet: boolean;
}

type Fruit = Apple | Banana | Orange;

# Tuple Type

type Tuple = [number, string, boolean];

const t: Tuple = [1, "text", true];