minstudio

기본 타입 완벽 가이드 (기본, 특수, Union, Literal)

여러 데이터를 묶어서 관리하는 자료구조들의 타입 정의 방법입니다.

🥗 튜플(Tuple)과 배열(Array)의 차이 배열 (Array) number[] Array<number> 무한히 늘어날 수 있는 같은 과일 상자 튜플 (Tuple) [string, number] 칸마다 지정석이 있는 코스 요리 접시 열거형 (Enum) enum Role { ADMIN, USER } 특정 값들의 집합에 이름을 붙여 상수로 사용
// 1. Array (배열) - 같은 타입만 모아둠
let fruits: string[] = ["사과", "바나나"];
let numbers: Array = [1, 2, 3]; // 제네릭 표기법

// 2. Tuple (튜플) - 길이와 타입이 고정된 특별한 배열
let userAccount: [string, number] = ["minstudio", 9999];
// userAccount = [9999, "minstudio"]; // ❌ 순서가 틀리면 에러!

// 3. Enum (열거형) - 특정 값들의 집합에 이름을 붙임
enum Role {
    ADMIN = "관리자",
    USER = "일반회원",
    GUEST = "비회원"
}
let myRole: Role = Role.ADMIN;



타입스크립트에서만 존재하는 4가지 특수 목적의 타입입니다. any는 마치 바이러스 같아서 프로젝트 전체의 타입 안전성을 파괴하므로 극도로 피해야 하며, 불가피할 경우 unknown을 사용하는 습관을 들여야 합니다.

🚨 any vs unknown 🦠 any (프리패스) 타입 검사소를 그냥 부수고 통과합니다. 문자열에 숫자 메서드를 써도 막지 않는 시한폭탄입니다. 💼 unknown (잠긴 금고) 무엇이든 담을 수 있지만, 사용할 땐 반드시 열쇠(타입 검사)로 확인하기 전까지는 사용을 금지합니다.
// 1. any: 타입 검사를 포기함 (TS를 쓰는 의미가 없어짐, 사용 금지!)
let garbage: any = 123;
garbage = "문자"; // 통과
garbage.push(1); // 통과 (심지어 배열 메서드를 써도 안 막음!)

// 2. unknown: any와 비슷하지만, 사용하기 전에 무조건 타입을 확인해야 하는 안전한 any
let mystery: unknown = 10;
// let num: number = mystery; // ❌ 에러! "mystery가 숫자인지 증명해!"
if (typeof mystery === "number") {
    let num: number = mystery; // ✅ 증명 완료! 허가됨
}

// 3. void: 아무것도 리턴(반환)하지 않는 함수
function sayHi(): void {
    console.log("안녕하세요"); // return이 없음!
}

// 4. never: 절대 끝에 도달하지 않거나 무조건 에러를 던지는 함수
function throwError(): never {
    throw new Error("시스템 붕괴!");
}



기존에 존재하는 타입들을 조합하여 더 복잡하고 정교한 새로운 타입을 만들어내는 연산자들입니다.

🔗 타입의 조합 (OR vs AND) | (Union) "또는 (OR)" - 합집합 조건 완화 (어느 하나라도 만족) 사과 이거나 바나나면 모두 통과! type Fruit = Apple | Banana & (Intersection) "그리고 (AND)" - 교집합 조건 강화 (모든 속성을 만족) 빨간색이면서 과일이어야 통과! type RedFruit = Red & Fruit
// 1. Union Type (|) : A이거나 B (둘 중 하나만 만족하면 통과)
type StringOrNumber = string | number;
let myValue: StringOrNumber = "안녕하세요";
myValue = 100; // 숫자로 바꿔도 에러 없음!

// 2. Intersection Type (&) : A이면서 B (두 조건을 완벽하게 합침)
interface Person { name: string; }
interface Developer { skills: string[]; }

// DeveloperPerson은 name과 skills를 "모두" 가져야만 합니다!
type DeveloperPerson = Person & Developer;

const minsu: DeveloperPerson = {
    name: "민수",
    skills: ["TS", "React"] // 하나라도 빠지면 에러 발생!
};



타입의 범위를 string이나 number처럼 넓게 잡지 않고, 특정 문자열이나 숫자 자체를 타입으로 박아버리는 기능입니다. 자동 완성 기능을 극대화하고 오타로 인한 버그를 완벽하게 막아줍니다.

🧱 리터럴(Literal) 장난감 상자 허용된 블록만 들어갈 수 있는 상자 type Size = 'S' | 'M' | 'L' 'S' 'M' 'L' 'XL' string이나 number 전체가 아니라, 오직 명시된 '값' 자체만 허용
// 단순히 문자열(string)이라고 퉁치는 것이 아니라,
// 오직 "success", "error", "loading" 3개의 단어만 들어오도록 제한!
type Status = "success" | "error" | "loading";

let currentStatus: Status = "loading"; // 통과
// currentStatus = "finish"; // ❌ 에러! "finish"는 허락된 단어가 아님!
기본 타입 완벽 가이드 (기본, 특수, Union, Literal) | Minstudio