카테고리 없음
TypeScript #5 리터럴, 유니온/교차 타입
nh_3521099031483
2024. 5. 16. 18:22
// Literal Types
const userName1 = "Bob" // userName1에 마우스를 올려보면 "Bob"이라고 나온다. 변화할 수 없으니 Bob이외의 값은 넣을 수 없다.
// userName1처럼 정해진 string값을 가진 것을 문자열 리터럴 타입이라고 한다.
let userName2 = "Tom" // 반면 userName2는 언제든 변화할 수 있으니 넓은 개념의 string타입으로 정의된다.
userName2 = 3 // string타입이므로 에러가 난다
let userName3: string | number = "Andy"
userName3 = 3 // 숫자도 넣을 수 있게 해주려면 명시적으로 작성해 주어야 한다.
type Job = "police" | "developer" | "teacher";
interface User {
name : string;
job : Job;
}
const user:User = {
name : "Bob",
job : "developer" // Job에 있는 요소들만 넣을 수 있다.
}
interface HighSchoolStudent {
name: number | string;
grade: 1 | 2 | 3; // | 이 기호를 사용하는 타입을 유니온 타입이라고 한다.
}
// Union types
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); // color는 Car와 Mobile 두 곳 다 있어서 사용할 수 있다
gift.start(); // Car에만 start가 들어있어서 에러가 나온다.
if(gift.name === "car") {
gift.start();
} else {
gift.call();
} // if문을 이용해 car인지 mobile인지 확인 후에 알맞은 함수를 사용할 수 있다.
// 확인해야 하는 것이 많아지면 switch문을 사용하면 된다.
// 이렇게 동일한 타입의 속성을 다르게 해서 구분할 수 있는 것을 식별 가능한 유니온 타입이라고 한다.
}
// Intersection Types 교차 타입 and를 의미
interface Car2 {
name: string;
start(): void;
}
interface Toy {
name: string;
color: string;
price: number;
}
const toyCar: Toy & Car2 = { // 이렇게 &로 타입을 설정하면 두 개의 인터페이스의 모든 타입을 기입해 줘야 한다.
name: "타요",
start() {},
color: "blue",
price: 1000,
};
// 교차타입은 여러개의 타입을 하나로 합쳐주는 역할을 한다. 그래서 필요한 모든 기능을 가진 하나의 타입이 만들어 진다.