-
Any, Union Type, Intersection Type, Type Aliases & Type Guards에 대해서 알아보기⌨️ conceptualization/Typescript 2022. 9. 11. 17:10728x90
Any Type 이란?
어떠한 타입이든 모두 ok(타입체크 안하겠다 라는 의미) BUT ❗️ 왠만하면 쓰지 않는 것이 좋다. WHY ❓ 타입스크립트는 타입에 관한 더 많은 정보를 명시할수로 좀더 명확하게 개발자의 의도를 기술할 수 있으며, 타입에러를 컴파일시 잡아낼수 있다. -> 효과적인 코드의 유지보수
🧠 그렇다면 제한된 타입들을
동시에 지정하고 싶을때 사용하는 방법으로는 ?유니언 타입(Union Type) & 교차 타입
📌 유니언 타입(Union Type)
변수값을 여러타입으로 지정가능하다.
문법(Syntax)
let someValue : number | string
someValue 의 타입을 number 혹은 string 값으로 지정가능하다.
let day : number | string = 1; day = '하루' day = false // 📌 boolean 값은 타입에 포함되지 않으므로 에러메세지가 발생된다.
📌 교차 타입(Intersection Type) 과 함께 보는 유니온 타입(Union Type)
1. 식별 가능한 유니온타입(union type)
👉🏻 실제 쓰여지는 예시를 통해 유니온 타입에 대해 좀더 알아보자 !
interface Beverage { name: "tea"; ingredients: ["mint", "water", "green"]; drink(): void; } interface Dessert { name: "cake"; ingredients: ["flour", "egg", "wipecream"]; eat(): void; } function enjoy(food: Beverage | Dessert) { // 📌 유니온타입 : 두개의 타입중 하나를 포괄하는 '|' 연산자를 사용하였다. console.log(food.ingredients); if (food.name === "tea") { //📌 error를 방지하기 위해 파라미터 내 프로퍼티를 분기처리를 하였다. food.drink(); }else{ food.eat(); } }
2. 교차타입 (Intersection type)
👉🏻 실제 쓰여지는 예시를 통해 교차타입에 대해 좀더 알아보자 !
interface Beverage { name: string; ingredients: string[]; drink(): void; } interface Dessert { name: string; ingredients: string[]; eat(): void; price: number; } const ameal: Beverage & Dessert = { //📌 교차타입: 두개의 타입을 포괄하는 '&' 연산자를 사용하여 지정하였다 name: "ameal", ingredients: ["flour", "egg", "wipecream"], drink() {}, eat() {}, price: 5000, };
❓ 만약 같은 조합이 계속 반복될 경우 어떻게 코드를 향상 시킬수 있을까?
같은 코드를 반복하는 것 보다는 코드를 타입으로 지정하고 재활용하자 바로 -> Type Aliases
Type Aliases
타입 키워드를 사용하여 새로운 타입을 선언하는 것
type DayType = number | string;
- 이런식으로 type Aliases를 사용하게 되면 다음과 같이 좀더 깔끔한 코드로 나타낼수 있다.
type DayType = number | string; let day : DayType = 1; day = '하루' const test1 = (a : DayType, b : DayType) : void => {}
Type Guards
typeof Operator를 사용하여 코드 검증을 수행하는것 (typeof Operator 말고도 여러 방법이 있음)
- 다음과 같은 코드가 있다고 가정해 보자
type DayType = number | string; let day = 1; const test1 = (a: DayType): void => { day = a; // 📌 a가 유니온 타입으로(number 또는 string)값으로 설정되어 있으므로 error 메세지가 발생 하게된다. };
👉🏻 이런경우 typeof Operator(연산자)와 조건문을 사용하여 해결할 수 있다.
type DayType = number | string; let day = 1; const test1 = (a: DayType): void => { if (typeof a === "string") { day = 0; } else { day = a; } }; test1(50);
참고)
땅콩코딩 : https://www.youtube.com/watch?v=lmjQh2LrH94
코딩앙마 : https://www.youtube.com/watchv=QZ8TRIJWCGQ&list=PLZKTXPmaJk8KhKQ_BILr1JKCJbR0EGlx0&index=6
'⌨️ conceptualization > Typescript' 카테고리의 다른 글
Generics 에 대하여 (0) 2022.09.12 함수의 타입명시 (0) 2022.09.11 열거형(Enum) 과 리터럴 타입 (0) 2022.09.11 타입으로 사용되는 인터페이스 (Interface) (0) 2022.09.09 타입 명시 (Type Annotations) (0) 2022.09.09