자바스크립트에서 let
과 const
키워드를 사용해서 변수를 선언할 수 있다.
const
는 변하지 않는 값을 선언할 때 사용하고,
let
은 변할 수 있는 값을 선언할 때 사용한다.
const userName1 = "Bob";
let userName2 = "Tom";
타입스크립트에서 위와 같이 작성하고 마우스를 올려보면
const
로 선언한 userName1은 “Bob”
,let
으로 선언한 userName2는 string
타입이라고 알려준다.userName1은 string
이지만, const
로 선언된 변수이기 때문에 변할 수 없어 “Bob”
이외의 값은 가질 수 없다.
반면, let
으로 선언된 변수 userName2는 현재 “Tom”
이지만 언제든 다른 값으로 변할 수 있으니 보다 넓은 개념의 string
타입으로 정의된다.
userName을 3으로 바꾸면 에러가 발생한다.
만약 3도 넣을 수 있게 만들어주려면, 명시적으로 아래와 같이 작성해야 한다.
const userName1 = "Bob";
let userName2: string | number = "Tom";
userName2 = 3;
userName1 처럼, 정해진 string
값을 가진 것을 문자열 리터럴 타입
이라고 한다.
const userName1 = "Bob";
let userName2: string | number = "Tom";
type Job = "police" | "developer" | "teacher";
interface User {
name: string;
job: Job;
}
const user: User = {
name: "Bob",
job: "developer",
}
job 프로퍼티는 위에서 선언한 string만 쓸 수 있다.
아래와 같이 숫자형 리터럴 타입
도 사용할 수 있다.
const userName1 = "Bob";
let userName2: string | number = "Tom";
type Job = "police" | "developer" | "teacher";
interface User {
name: string;
job: Job;
}
const user: User = {
name: "Bob",
job: "developer",
}
interface HighSchoolStudent {
name: number | string;
grade: 1 | 2 | 3; // 숫자형 리터럴 타입
}
유니언 타입은 |
를 사용해서 표현하고, or
의 개념으로 사용된다.
// 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);
gift.start(); // ❌ error!
}
console.log(gift.color)
에서는 인터페이서 Car과 Mobile 둘 다 color 속성을 가지고 있어서 에러가 나지 않지만, start()
는 Car에만 있으므로 위와 같이 에러가 난다.
이런 경우, start()
함수를 사용하기 전에, Car인지 Mobile 인지 확인해야 한다.
// 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);
if (gift.name === "car") {
gift.start();
} else {
gift.call();
}
// ✅ 만약 검사해야할 항목이 많아진다면 **switch**를 사용하는 것이 가독성이 좋다!
}
식별 가능한 유니언 타입을 사용했다.
동일한 이름의 속성을 정의하고 (여기서 name
), 이것의 타입(’car’
또는 ‘mobile’
)을 다르게 줌으로써 두개의 인터페이스를 구분할 수 있다. (주의! string
타입이 아니라 ‘car’
또는 ‘mobile’
타입이다!)
이렇게 동일한 속성의 타입을 다르게 해서 구분할 수 있는 것을 식별가능한 유니언 타입
이라고 한다.
교차타입은 여러 타입을 합쳐서 사용한다. → 필요한 모든 기능을 가진 하나의 타입이 된다.
유니언 타입이 or
의 의미였다면, 교차타입은 and
를 의미한다.
&
앰퍼샌드를 사용해서 타입을 나타낸다.
교차타입을 사용할 경우에는 해당되는 모든 속성을 기입해야 한다.
https://www.youtube.com/watch?v=QZ8TRIJWCGQ&list=PLZKTXPmaJk8KhKQ_BILr1JKCJbR0EGlx0&index=5