πŸ“† 2025.04.28 ‐ TypeScript type, intersection, interface, optional property, readonly

rogieΒ·2025λ…„ 4μ›” 28일

likelion-posting

λͺ©λ‘ 보기
9/10

🧠 배운 점 & 정리

  • νƒ€μž…(ex06-02.ts)

    • μ£Όμš” νƒ€μž…

      • κΈ°λ³Έ νƒ€μž…
        • string: λ¬Έμžμ—΄ νƒ€μž…
        • number: 숫자 νƒ€μž…
        • boolean: true/false 논리 νƒ€μž…
        • null: 값이 λΉ„μ–΄μžˆμŒμ„ λͺ…μ‹œν•˜λŠ” νƒ€μž…
        • undefined: 값이 ν• λ‹Ήλ˜μ§€ μ•Šμ€ μƒνƒœ
        • bigint: 맀우 큰 μ •μˆ˜λ₯Ό λ‹€λ£° 수 μžˆλŠ” νƒ€μž…
        • symbol: κ³ μœ ν•œ μ‹λ³„μžλ₯Ό λ§Œλ“€ λ•Œ μ‚¬μš©ν•˜λŠ” νƒ€μž…
      • μ°Έμ‘° νƒ€μž…
        • object: 객체 νƒ€μž… (key-value ꡬ쑰)
        • Array: νŠΉμ • νƒ€μž…μ„ μš”μ†Œλ‘œ κ°–λŠ” λ°°μ—΄
        • tuple: κ³ μ •λœ νƒ€μž…κ³Ό μˆœμ„œλ₯Ό κ°€μ§€λŠ” λ°°μ—΄
      • 특수 νƒ€μž…
        • any: λͺ¨λ“  νƒ€μž…μ„ ν—ˆμš© (λΉ„μΆ”μ²œ, νƒ€μž… μ•ˆμ •μ„± 떨어짐)
        • unknown: λͺ¨λ“  νƒ€μž…μ„ ν—ˆμš©ν•˜μ§€λ§Œ μ‚¬μš© μ „ νƒ€μž… 검사가 ν•„μš”ν•˜μ—¬ any보닀 μ•ˆμ „

    • 선택적 νŒŒλΌλ―Έν„° (ex06-04.ts)

      ν•¨μˆ˜μ˜ 맀개 λ³€μˆ˜λ₯Ό μ„ νƒμ μœΌλ‘œ 전달 λ°›κ³  μ‹Άμ„λ•Œ 맀개 λ³€μˆ˜λͺ… 뒀에 ?λ₯Ό μΆ”κ°€

      (()=>{
        function user(name /*1️⃣*/: string, age?/*1️⃣2️⃣*/: number) {
          console.log(name, age);
        }
      
        user('ν•˜λ£¨', 5);
        user('λ‚˜λ¬΄'); // 3️⃣
      
      })();
      • 1️⃣ νƒ€μž…μ§€μ •
      • 2️⃣ 선택적 νŒŒλΌλ―Έν„° 선언법: 뒀에 λ¬ΌμŒν‘œ 적기
      • 3️⃣ λ§€κ°œλ³€μˆ˜λ₯Ό μ „λ‹¬ν•˜μ§€ μ•ŠμœΌλ©΄ undefined

    • μœ λ‹ˆμ–Έ νƒ€μž…

      • μ—¬λŸ¬ μ’…λ₯˜μ˜ νƒ€μž…μ„ ν—ˆμš©ν•˜κΈ° μœ„ν•΄ | (OR μ—°μ‚°μž) 둜 μ—°κ²°ν•œ νƒ€μž…

      • any νƒ€μž…μ€ λͺ¨λ“  νƒ€μž…μ„ ν—ˆμš©ν•˜μ§€λ§Œ μœ λ‹ˆμ–Έ νƒ€μž…μ€ | μ—°μ‚°μžλ‘œ μ—°κ²°λœ νƒ€μž…μ€‘ ν•˜λ‚˜λ₯Ό ν—ˆμš©

      • μ—°μ‚°μžμ˜ μ•žλ’€κ°€ λ°”λ€Œμ–΄λ„ 상관이 μ—†λ‹€

      • μ½”λ“œ(ex06-05.ts)

        (() => {
          function logString(msg: string) {
            console.log(msg);
          }
          
          logString("hello"); // 1️⃣
          logString(123); // 2️⃣
          // --------
          
          function logNumber(msg: number) {
            console.log(msg);
          }
          logNumber(235); // 1️⃣
          logNumber("235");// 2️⃣
          // --------
          
          function log(msg: number | string) {
            console.log(msg);
          }
          log(123); // 3️⃣
          log("123"); // 3️⃣
        })();

        image

        • 1️⃣ 정상 μž‘λ™ β‡’ λ§€κ°œλ³€μˆ˜μ— ν• λ‹Ήν•œ νƒ€μž…μ΄ μΌμΉ˜ν•¨, 정상 좜λ ₯
        • 2️⃣ νƒ€μž… μ—λŸ¬ β‡’ λ§€κ°œλ³€μˆ˜μ— ν• λ‹Ήν•œ νƒ€μž…μ΄ λΆˆμΌμΉ˜ν•¨
        • 3️⃣ λ§€κ°œλ³€μˆ˜λ‘œ μ •μ˜ν•œ number, string 이 있음,
        • 4️⃣ νƒ€μž…κ°€λ“œ: 쑰건문 μ•ˆμ—μ„œ `νƒ€μž…λ²”μœ„λ₯Ό ν•œμ •`μ‹œμΌœμ€„ 수 μžˆλŠ” 방법
      • μ½”λ“œ(ex06-05-02.ts)

        (() => {
            function print(msg: number | string | boolean /*1️⃣*/) {
            if (typeof msg === "string") { // 2️⃣ 
              // string일 경우
              console.log(`${msg} κΈ€μžμˆ˜: ${msg.length}`);
            }
            if (typeof msg === "number") { // 2️⃣ 
              // number일 경우
              console.log(`${msg} + 10 = ${msg + 10}`);
            }
        
            if (typeof msg === "boolean") { // 2️⃣ 
              // boolean일 경우
              console.log(`${msg}: ${msg ? "μ°Έ" : "κ±°μ§“"}`);
            }
          }
        
          print("world"); // 3️⃣
          print(200); // 3️⃣
          print(false);// 3️⃣
        })();

        image

        • 1️⃣ νƒ€μž… μ„€μ •
        • 2️⃣ νƒ€μž…κ°€λ“œ
        • 3️⃣ 정상 μž‘λ™ β‡’ 2️⃣ νƒ€μž…κ°€λ“œκ°€ μž…λ ₯κ°’μ˜ νƒ€μž…(number, string, boolean)을 ν•˜λ‚˜ν•˜λ‚˜ κ²€μ‚¬ν•˜μ—¬, μΌμΉ˜ν•˜λŠ” κ²½μš°μ—λ§Œ ν•΄λ‹Ή 쑰건문 μ•ˆμ˜ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜κ³  좜λ ₯ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€. νƒ€μž…μ΄ μ •ν™•νžˆ κ΅¬λΆ„λ˜λ―€λ‘œ 각각 μ•Œλ§žμ€ λ°©μ‹μœΌλ‘œ μ²˜λ¦¬λ˜μ–΄ 정상 좜λ ₯λœλ‹€.

    • νƒ€μž… 별칭(ex06-06.ts)

      • 값을 λ³€μˆ˜μ— μ €μž₯ν•˜λ“―, νƒ€μž…μ„ λ³€μˆ˜μ— μ €μž₯ν•΄μ„œ μ‚¬μš©

      • μœ λ‹ˆμ–Έ νƒ€μž… 같은 λ³΅μž‘ν•œ νƒ€μž…μ— 의미 μžˆλŠ” 이름을 λΆ™μ—¬μ„œ μ‚¬μš© (별칭)

      • type ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•˜λŠ” μ‚¬μš©μž μ •μ˜ νƒ€μž…

      • λ™μΌν•œ μ΄λ¦„μœΌλ‘œ 쀑볡 μ„ μ–Έ λΆˆκ°€

      • JS둜 컴파일되면 제거됨

      • 관련적인 λͺ…λͺ… κ·œμΉ™

        • PascalCase
        • λͺ…μ‚¬ν˜•
      • μ½”λ“œ

        (() => {
            function logMessage(msg: string | number) {
            console.log(msg);
          }
        
          function warnMessage(msg: number | string) {
            // μŠ€νƒ€μΌ 적용
            console.log(`%c${msg}`, "color: yellow; font-size: 20px;");
          }
        
          logMessage("hello");
          logMessage(100);
          warnMessage("bye");
          warnMessage(200);
        })();
        (() => {
          **type Massge = string | number; // 1️⃣
          function logMessage(msg: Massge /* 2️⃣ */) {
            console.log(msg);
          }
        
          function warnMessage(msg: Massge) {
            // μŠ€νƒ€μΌ 적용
            console.log(`%c${msg}`, "color: yellow; font-size: 20px;");
          }
        
          logMessage("hello");
          logMessage(100);
          warnMessage("bye");
          warnMessage(200);
        })();
        

  • νƒ€μž… λ³„μΉ­μœΌλ‘œ 객체의 νƒ€μž… μ„ μ–Έ

    • 객체의 속성λͺ…κ³Ό μ†μ„±κ°’μ˜ νƒ€μž…μ„ μ§€μ •

    • 속성은 , λ˜λŠ” ; 으둜 ꡬ뢄할 수 μžˆμ§€λ§Œ 곡식 μŠ€νƒ€μΌ κ°€μ΄λ“œμ—μ„œλŠ” ;을 ꢌμž₯

    • νƒ€μž… 별칭을 νƒ€μž…μœΌλ‘œ μ§€μ •ν•œ κ°μ²΄λŠ” νƒ€μž… 별칭에 μ •μ˜λœ 속성λͺ…κ³Ό μ†μ„±μ˜ νƒ€μž…μ„ μ€€μˆ˜ν•΄μ•Ό 함

    • μ½”λ“œ(ex06-07.ts)

      (() => {
        type user = { // 1️⃣
          name: string;
          age: number;
        };
        const u1: user = { // 2️⃣
          name: "ν•˜λ£¨",
          age: 1,
        };
        const u2: user = { // 2️⃣
          name: "λ‚˜λ¬΄",
          age: 5,
        };
      
        console.log(u1.name); // 3️⃣
        console.log(u2.age); // 3️⃣
      })();
      

      image

      • 1️⃣ type ν‚€μ›Œλ“œλ₯Ό μ΄μš©ν•΄ userλΌλŠ” νƒ€μž… 별칭을 μƒμ„±ν•˜κ³ , name(string)κ³Ό age(number)의 νƒ€μž… ꡬ쑰λ₯Ό μ •μ˜ν•¨
      • 2️⃣ u1, u2λŠ” user νƒ€μž…μ„ λͺ…μ‹œμ μœΌλ‘œ μ§€μ •ν•˜μ—¬ 객체λ₯Ό μƒμ„±ν–ˆμŒ. 이λ₯Ό 톡해 νƒ€μž… μ•ˆμ •μ„±μ„ 확보함
      • 3️⃣ u1.name은 λ¬Έμžμ—΄(string)둜, u2.ageλŠ” 숫자(number)둜 νƒ€μž…μ΄ 보μž₯λ˜μ–΄ 각각 정상 좜λ ₯됨

  • μΈν„°μ„Ήμ…˜ νƒ€μž…

    • νƒ€μž… μ—¬λŸ¬κ°œλ₯Ό ν•˜λ‚˜λ‘œ ν•©μΉ˜κΈ° μœ„ν•΄ &(AND μ—°μ‚°μž) 둜 μ—°κ²°ν•œ νƒ€μž…

      • νƒ€μž… 별칭을 ν™•μž₯ν•  λ•Œ 주둜 μ‚¬μš©
    • λ™μΌν•œ 속성을 μΈν„°μ„Ήμ…˜ νƒ€μž…μœΌλ‘œ μΆ”κ°€ν• λ•Œ νƒ€μž…μ΄ λ‹€λ₯΄λ©΄ never νƒ€μž…μ΄ λ˜λ©΄μ„œ ν•΄λ‹Ή 속성은 μ‚¬μš©μ΄ λΆˆκ°€ν•¨

    • μ½”λ“œ(ex06-08.ts)

      (() => {
        // 할일 λ“±λ‘μ‹œ μ‚¬μš©
        type TodoRegist = { // 1️⃣
          title: string;
          content: string;
        };
      
        // 할일 μ‘°νšŒμ‹œ μ‚¬μš©
        type TodoInfo = TodoRegist & { // 2️⃣
          id: number;
          done: boolean;
        };
      
        const todo1: TodoRegist = { // 3️⃣
          title: "νƒ€μž…μŠ€ν¬λ¦½νŠΈ 곡뢀",
          content: "νƒ€μž…μŠ€ν¬λ¦½νŠΈ μˆ˜μ—… λŒ€λΉ„ν•΄μ„œ 미리 μ±… 읽어보기.",
        };
        const todo2: TodoInfo = { // 3️⃣
          id: 13,
          title: "νƒ€μž…μŠ€ν¬λ¦½νŠΈ 곡뢀",
          content: "νƒ€μž…μŠ€ν¬λ¦½νŠΈ μˆ˜μ—… λŒ€λΉ„ν•΄μ„œ 미리 μ±… 읽어보기.",
          done: false,
        };
      
        console.log(todo1.title, ":", todo1.content);
        console.log("todo2 ν•©λ³Έ!: ", todo2.id, todo2.title, 
        todo2.content, todo2.done);
      })();
      • 1️⃣ TodoRegist νƒ€μž…μ„ λ§Œλ“€μ–΄ titleκ³Ό content 속성에 각각 string νƒ€μž…μ„ μ§€μ •
      • 2️⃣ TodoInfo νƒ€μž…μ€ TodoRegist νƒ€μž…μ„ 상속받고(& μ‚¬μš©), μΆ”κ°€λ‘œ id(number), done(boolean) 속성을 ν™•μž₯ν•΄μ„œ μ •μ˜
      • 3️⃣ todo1은 TodoRegist νƒ€μž…μ„ λ”°λ₯΄λŠ” 객체이고, todo2λŠ” ν™•μž₯된 TodoInfo νƒ€μž…μ„ λ”°λ₯΄λŠ” 객체

  • μΈν„°νŽ˜μ΄μŠ€

    • 객체의 νƒ€μž…μ„ μ •μ˜ν•˜κΈ° μœ„ν•΄ μ‚¬μš©(객체의 속성λͺ…κ³Ό μ†μ„±κ°’μ˜ νƒ€μž…μ„ μ§€μ •)

    • 속성은 ,λ˜λŠ” ;으둜 ꡬ뢄

    • interface ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•˜λŠ” μ‚¬μš©μž μ •μ˜ νƒ€μž…

    • μΈν„°νŽ˜μ΄μŠ€λ₯Ό νƒ€μž…μœΌλ‘œ μ§€μ •ν•œ κ°μ²΄λŠ” ν•΄λ‹Ή μΈν„°νŽ˜μ΄μŠ€μ— μ •μ˜λœ 속성λͺ…κ³Ό μ†μ„±μ˜ νƒ€μž…μ„ μ€€μˆ˜ν•΄μ•Ό 함

    • JS둜 컴파일 ν•˜λ©΄ 제거됨

    • μ½”λ“œ(ex06-07.ts, ex06-09.ts)

      // ex06-07.ts
      (() => {
        type user = { // 1️⃣
          name: string;
          age: number;
        };
        const u1: user = {
          name: "ν•˜λ£¨",
          age: 1,
        };
        const u2: user = {
          name: "λ‚˜λ¬΄",
          age: 5,
        };
      
        console.log(u1.name);
        console.log(u2.age);
      })();
      
      // ex06-09.ts
      (() => {
        interface User { // 1️⃣
          name: string;
          age: number;
        }
        const u1: User = {
          name: "ν•˜λ£¨",
          age: 1,
        };
        const u2: User = {
          name: "λ‚˜λ¬΄",
          age: 5,
        };
      
        console.log(u1.name);
        console.log(u2.age);
      })();
      

      1️⃣ ex06-07.ts은 type, ex06-09.ts은 interfaceλ₯Ό μ‚¬μš©ν•΄ user νƒ€μž…μ„ μ •μ˜ν•¨. λ‘˜ λ‹€ name(string)κ³Ό age(number) 속성을 가짐

      • κΈ°λ³Έ μΈν„°μ„Ήμ…˜ μ‚¬μš©(ex06-10.ts): λ³€μˆ˜, ν•¨μˆ˜μ˜ 맀개 λ³€μˆ˜, ν•¨μˆ˜μ˜λ¦¬ν„΄ νƒ€μž…μ— μ‚¬μš©

        (() => {
          interface User { // 1️⃣
            name: string;
            age: number;
          }
        
          const u1: User = { // 2️⃣
            name: "ν•˜λ£¨",
            age: 1,
          };
          const u2: User = { // 2️⃣
            name: "λ‚˜λ¬΄",
            age: 5,
          };
          console.log(u1.name);
          console.log(u2.age);
        
          const createUser = function (name: string, age: number): User {
            return { name, age };
          }; // 3️⃣
        
          const u3: User = createUser("μœ μ €ν•‘", 9);
          console.log(u3.name);
        
          function getAge(user: User): number { // 4️⃣
            return user.age;
          }
        
          console.log(getAge(u1));
          console.log(getAge(u2));
        })();
        
        • 1️⃣ UserλΌλŠ” μ΄λ¦„μœΌλ‘œ name(string)κ³Ό age(number)λ₯Ό κ°–λŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό 생성
        • 2️⃣ u1, u2 객체λ₯Ό User νƒ€μž…μœΌλ‘œ μ§€μ •ν•˜μ—¬ νƒ€μž… μ•ˆμ •μ„±μ„ 확보
        • 3️⃣ createUser ν•¨μˆ˜κ°€ User νƒ€μž… 객체λ₯Ό λ°˜ν™˜ν•˜λ„λ‘ 리턴 νƒ€μž…μ„ μ§€μ •
        • 4️⃣ getAge ν•¨μˆ˜κ°€ λ§€κ°œλ³€μˆ˜λ‘œ User νƒ€μž… 객체λ₯Ό λ°›κ³ , κ·Έ 객체의 age 값을 λ°˜ν™˜

  • 클래슀 μΈν„°νŽ˜μ΄μŠ€ μ‚¬μš©

    • 클래슀의 νƒ€μž… 지정에 μ‚¬μš©

    • 클래슀λͺ… 뒀에 implements ν‚€μ›Œλ“œ μΆ”κ°€

    • μΈν„°νŽ˜μ΄μŠ€λ₯Ό νƒ€μž…μœΌλ‘œ μ§€μ •ν•œ 클래슀의 멀버 λ³€μˆ˜μ™€ λ©”μ„œλ“œλŠ” μΈν„°νŽ˜μ΄μŠ€μ— μ •μ˜λœ 속성과 μ†μ„±μ˜ νƒ€μž…μ„ μ€€μˆ˜ν•΄μ•Ό 함

    • μ½”λ“œ(ex06-11.ts)

      (() => {
        interface Score { // 1️⃣
          kor: number;
          eng: number;
          sum(): number;
          avg(): number;
        }
      
        class HighSchool implements Score { // 2️⃣
          kor: number;
          eng: number;
          constructor(kor: number, eng: number) {
            this.kor = kor;
            this.eng = eng;
          }
          sum() {
            return this.kor + this.eng;
          }
          avg() {
            return this.sum() / 2;
          }
        }
      
        function printScore(score: Score) { // 3️⃣
          console.log(score.sum(), score.avg());
        }
      
        const haru = new HighSchool(100, 90); // 4️⃣
        printScore(haru); // 5️⃣
      })();
      
      • 1️⃣ ScoreλΌλŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό μƒμ„±ν•΄μ„œ kor, eng (number νƒ€μž…)κ³Ό sum(), avg() λ©”μ„œλ“œλ₯Ό μ •μ˜ν•¨

      • 2️⃣ HighSchool ν΄λž˜μŠ€κ°€ Score μΈν„°νŽ˜μ΄μŠ€λ₯Ό implements(κ΅¬ν˜„)ν•˜μ—¬ kor, eng 속성과 sum(), avg() λ©”μ„œλ“œλ₯Ό κ΅¬ν˜„ν•¨

      • 3️⃣ printScore ν•¨μˆ˜λŠ” λ§€κ°œλ³€μˆ˜λ‘œ Score νƒ€μž…μ„ λ°›κ³ , sum()κ³Ό avg() κ²°κ³Όλ₯Ό 좜λ ₯함

      • 4️⃣ haruλΌλŠ” μ΄λ¦„μœΌλ‘œ HighSchool μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•˜κ³ , kor=100, eng=90 값을 전달함

      • 5️⃣ printScore(haru)λ₯Ό ν˜ΈμΆœν•΄μ„œ haru 객체의 총점(sum())κ³Ό 평균(avg())을 좜λ ₯함

        Score μΈν„°νŽ˜μ΄μŠ€
        β”œβ”€ kor: number
        β”œβ”€ eng: number
        β”œβ”€ sum(): number
        └─ avg(): number
        
        HighSchool 클래슀 (implements Score)
        β”œβ”€ kor
        β”œβ”€ eng
        β”œβ”€ sum()
        β”‚  └─ return this.kor + this.eng
        └─ avg()
            └─ return this.sum() / 2
        
        printScore(score: Score) ν•¨μˆ˜
        β”œβ”€ console.log(score.sum())
        └─ console.log(score.avg())
        
        haru 객체 생성
        └─ new HighSchool(100, 90)
        
        printScore(haru) 호좜
        β”œβ”€ haru.sum() μ‹€ν–‰
        └─ haru.avg() μ‹€ν–‰
        

  • optional property

    • 객체의 속성을 μ„ νƒμ μœΌλ‘œ λΆ€μ—¬ν•˜κ³  μ‹Άμ„λ•Œ μΈν„°νŽ˜μ΄μŠ€ 속성λͺ… 뒀에 ?λ₯Ό μΆ”κ°€

  • readonly

    • μΈν„°νŽ˜μ΄μŠ€μ˜ 속성λͺ…μ•žμ— readonlyν‚€μ›Œλ“œ μΆ”κ°€

    • 객체 μƒμ„±μ‹œμ—λ§Œ κ°’ 할당이 κ°€λŠ₯ν•˜κ³  μƒμ„±λœ μ΄ν›„μ—λŠ” μˆ˜μ •ν•  수 μ—†λŠ” 속성을 λ§Œλ“€λ•Œ μ‚¬μš©

    • μ½”λ“œ

      (() => {
        interface Todo {
          readonly id: number;
          title: string;
          content: string;
          done?: boolean;
        }
      
        const todo1: Todo = {
          id: 1,
          title: "TypeScript ν•™μŠ΅ν•˜κΈ°",
          content: "ν•™μŠ΅ν•˜κΈ°",
          done: false,
        };
        console.log(todo1);
        const todo2: Todo = {
          id: 2,
          title: "TypeScript ν•™μŠ΅ν•˜κΈ°",
          content: "ν•™μŠ΅ν•˜κΈ°",
        };
      
        console.log("λ³€κ²½ μ „", todo2);
        todo2.id = 3;
        todo2.content = "ν•™μŠ΅ 끝";
        console.log("λ³€κ²½ ν›„", todo2);
      })();
      

      image

      image

      • 1️⃣ TodoλΌλŠ” νƒ€μž…(섀계도)을 μ •μ˜ν–ˆλ‹€. (readonly/optional νŠΉμ§• 있음)
      • 2️⃣ Todo νƒ€μž…μ„ μ΄μš©ν•΄μ„œ todo1 객체λ₯Ό λ§Œλ“€μ—ˆλ‹€. (섀계도에 맞좰 생성)
      • 3️⃣ todo2 객체λ₯Ό λ§Œλ“€κ³  μˆ˜μ •ν•˜λ € ν–ˆλŠ”λ°, readonly idλŠ” μˆ˜μ • λͺ»ν•˜κ³ , contentλŠ” μˆ˜μ • κ°€λŠ₯ν–ˆλ‹€

  • μΈν„°νŽ˜μ΄μŠ€ 상속

    • λΆ€λͺ¨ μΈν„°νŽ˜μ΄μŠ€μ˜ 속성과 λ©”μ„œλ“œ μ •μ˜λ₯Ό μžμ‹ μΈν„°νŽ˜μ΄μŠ€κ°€ λ¬Όλ € λ°›κ³  ν™•μž₯

    • interfaceμ„ μ–ΈλΆ€μ˜ extendsν‚€μ›Œλ“œ 뒀에 상속 받을 λΆ€λͺ¨ μΈν„°νŽ˜μ΄μŠ€ μ§€μ •

    • μ½”λ“œ(ex06-13.ts)

      (() => {
        interface TodoRegist { //  1️⃣
          title: string;
          content: string;
        }
      
        interface TodoInfo extends TodoRegist { // 2️⃣
          id: number;
          done: boolean;
        }
      
        const todo1: TodoRegist = { // 3️⃣
          title: "TypeScript",
          content: "ν•™μŠ΅ν•˜κΈ°",
        };
        console.log("할일 상세 쑰회", todo1);
      
        const todo2: TodoInfo = { // 4️⃣
          id: 1,
          title: "TS",
          content: "ν•™μŠ΅ν•˜κΈ°",
          done: false,
        };
      
        console.log("할일 상세 쑰회", todo2); // 5️⃣
      })();
      
      • 1️⃣ TodoRegistλΌλŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ§Œλ“€μ–΄ titleκ³Ό content 속성(string νƒ€μž…)을 μ •μ˜ν•¨
      • 2️⃣ TodoInfoλΌλŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό μƒμ„±ν•˜κ³ , TodoRegistλ₯Ό extends(상속)ν•˜μ—¬ id, done 속성을 좔가함
        • title, contentλŠ” μƒμ†λ°›μ•„μ„œ μžλ™ 포함됨
      • 3️⃣ todo1 객체λ₯Ό TodoRegist νƒ€μž…μœΌλ‘œ μƒμ„±ν•˜κ³ , titleκ³Ό content 값을 할당함
      • 4️⃣ todo2 객체λ₯Ό TodoInfo νƒ€μž…μœΌλ‘œ μƒμ„±ν•˜κ³ , id, title, content, done 값을 λͺ¨λ‘ 할당함
      • 5️⃣ 각각의 todo1, todo2 객체λ₯Ό console.log둜 좜λ ₯ν•˜μ—¬ λ‚΄μš© 확인

πŸ”— λ°°μ› λ˜ 파일


❓ 생긴 질문 / 더 μ•Œμ•„λ³Ό 것

  • μ΅μˆ™ν•œκ±°λž‘ λͺ¨λ₯΄λŠ”κ²Œ μžˆμ–΄μ„œ μ’‹μ•˜λ‹€
  • sassλŠ” 컴파일링 ν•˜λŠ” κ³Όμ •μ—μ„œ μ—λŸ¬κ°€ 있으면 컴파일링 μžμ²΄κ°€ μ•ˆλ˜λŠ”λ° TypeScriptλŠ” μ—λŸ¬κ°€ μžˆμ–΄λ„ λ¬΄μ‹œν•˜κ³  μ»΄νŒŒμΌλ§ν•˜λŠ” 과정이 μ‹ κΈ°ν–ˆλ‹€.

πŸ”— μ°Έκ³  자료

profile
front-endλ₯Ό κΏˆκΏ‰λ‹ˆλ‹€

0개의 λŒ“κΈ€