리터럴 타입 이란?

Typescript는 문자열과 숫자, boolean 세가지 리터럴 타입이 있는데, 이를 사용하면 문자열이나 숫자에 정확한 값을 지정할 수 있다.

Literal Narrowing(타입 좁히기)

let으로 변수를 선언할 경우 변수의 값을 변경할 수 있음을 알릴 수 있고 const로 변수를 선언하면 이 객체는 절대 변경되지 않음을 정할 수 있다.

image-20220711202024461

[type과 유니온 타입으로 타입 좁히기 - 예시 코드]

type과 유니온 타입을 결합하여, 타입을 좁힐 수 있다.

아래 예시 코드에서는 type으로 Job의 타입을 선언하였다.

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

interface Person {
    name: string
    age: number
    job: Job
}

const person: Person = {
    name: "LDK",
    age: 35,
    job: "developer"
    // job: "student" // 타입 에러
}

console.log(person.name, person.age, person.job);
LDK 35 developer

[인터페이스와 유니온 타입 오류 - 예시 코드]

아래 예시 코드에 오류가 발생한 이유는 start() 함수가 인터페이스 Car에만 있기 때문에, 한정 지을 필요가 있다.

image-20220711204247388

위 오류 코드에서 if문을 사용하여 실행문을 한정 지을 수 있다.

// 유니온 타입 응용
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(); // 오류

    if (gift.name == "car") {
        gift.start();
    } else {
        gift.call();
    }
}

[교차 타입 - 예시 코드]

// 교차 타입
interface Car {
    name: string;
    start(): void;
}

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

// Toy 와 Car 교차 타입
const toyCar: Toy & Car = {
    name: "sm5",
    start() { },
    color: "blue",
    price: 1000
};

댓글남기기