Literal Types

const userName1 = "Bob"; // const userName1: "Bob"
let userName2 = "Son"; // let userName2: string

userName2 = 3; // err

이 때 userName1처럼 정해진 string 값을 가진 것을 문자열 리터럴 타입이라고 한다.

type Job = "police" | "developer" | "teacher";

interface User {
  name: string;
  job: Job;
}

const user: User = {
  name: "Bob",
  job: "student", // err - Type "student" is not assignable to type 'Job'
};


Union Types

or처럼 사용

interface Car {
  name: "car";
  color: string;
  start(): void;
}

interface Mobile {
  name: "mobile";
  color: string;
  call(): void;
}

function getGift(gift: Car | Mobile) {
  console.log(gift.color);
  gift.start(); // err - Property 'start' does not exist on type 'Mobile'.
  if (gift.name === "car") {
    gift.start(); // (Parameter) gift : Car
  } // 검사 항목이 많아지면 switch
}

동일한 속성의 타입을 다르게 해서 구분하는 것이 식별 가능한 유니온 타입이라고 한다.



Intersection Type(교차 타입)

여러 타입을 합쳐서 사용

and처럼 사용

interface Car {
  name: string;
  start(): void;
}

interface Toy {
  name: string;
  color: string;
  price: number;
}

const toyCar: Toy & Car = {
  name: "타요",
  start() {},
  color: "blue",
  price: 1000,
};

&(교차타입)를 사용할 때는 모든 속성을 전부 기입해야 한다.



Type alias


타입은 변수에 담아 사용할 수 있다.

type MyType = string | number;

let name: MyType = "Bob";

타입명은 보통 대문자로 사용한다.

댓글남기기