ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [TS] 객체
    codeStates front-end/Typescript 2023. 3. 6. 20:36
    반응형

    목차

       

      📌  객체

       

       

      📍객체 타입

      기존 객체에서 타입을 유추하는 방법도 좋치만, 객체 타입을 명시적으로 선언하는 방법도 좋다.

      값의 속성의 접근하려면 value.멤버 또는 value['멤버']

       

      const poet = {
      	born : 1935;,
          name : "Mary Oliver"
      }
      
      poet['born']; // 타입 : number
      poet.name; // 타입 : String
      
      poet,end; // Error

       

      // 객체 타입 선언
      
      let student : {
      	age : number;
          name : string;
      }
      
      student = {
      	age : 20;
          name : "jeong";
      }
      
      // 별칭 객체 타입
      
      let student2 : student;
      
      student2 = {
      	age : 22;
          name : "hwan";
      }

       

      📍구조적 타이핑

       

      타입스크립트의 타입 시스템은 구조적으로 타입화되어 있다.

      타입의 충족되는 모든 값은 해당 타입의 값으로 사용할 수 있다.

      즉  객체 타입으로 선언되면 어떤 객체를 사용하든 특정 속성이 있어야 한다.

       

      type WithFirstName = {
      	firstName : String;
      };
      
      type WithLastName = {
      	lastName : String;
      }
      
      type hasBoth = {
      	firstName : jeong;
          lastName : kim;
      }
      
      let WithFirstName : WithFirstName = hasboth;
      let WithLastName : WithLastName = hasBoth;

       

      🔗 사용 검사

      할당하는 값에는 타입의 필수 속성이 있어야 한다.

      타입이 일치하지 않아도 허용되지 않는다.

       

      초과 속성 검사

       

      변수가 객체 타입으로 선언되고, 초깃값에 객체 타입에서 정의된 것보다 많은 필드가 있다면 오류

       

      type FirstAndLastNames = {
      	first : string;
          last : string;
      }
      
      // ok
      const hasBoth : FirstAndLastNames = {
      	first : "~~",
          last : "~~",
      }
      
      // Error
      const hasOnlyOne : FirstAndLastNames = {
      	first : "~~",
      }
      
      // 초과 속성 검사 Error
      const hasOnlyOne : FirstAndLastNames = {
      	first : "~~",
          last : "~~",
          third : "~~",
      }

       

      중첩된 객체 타입

       

      JS에서도 가능하므로 TS에서도 중첩된 객체 타입이 가능하다.

      중첩된 객체 타입을 고유한 타입 이름으로 바꿔서 사용하면 코드와 오류 메시지가 읽기 쉬워진다.

       

      type Poem = {...}
      
      // ok
      const poemMatch : Poem = {...}
      
      // But Poem의 없는 값을 쓰는 것은 불가능

       

      선택적 속성

       

      모든 객체에 객체 타입 속성이 필요한 것은 아니다.

      : 앞에 ?를 추가하면 선택적 속성임을 나타낼 수 있다.

      ❗️❗️ 선택적 속성과 undefined를 포함한 유니언 타입의 속성과는 다르다.

      ?를 사용해 선언한다면 undefined 존재하지 않아도 되지만 |(논리연산자)로 선언된 유니언 타입은 반드시 존재해야 한다.

       

      type Book = {
      	author? : string;
          pages : number;
      }

       

       

       

      📍객체 타입 유니언

       

      객체 타입 또한 속성값을 기반으로 타입을 좁혀야 할 수 있다.

      객체 타입 유니언을 명시한다면 유니언 타입에 존재하는 속성에 대한 접근만 허용한다.

       

      cosnt poem = Math.random() > 0.5
      	? {name : "AA", pages : 120}
          : {name : "BB", rhymes : true}
          
          //타입 :
          {
          	name : string;
              pages : number;
              rhymes? : undefined;
          }
          |
          {
              name : string;
              pages : undefined;
              rhymes? : boolean;
          }

       

      객체 타입 내로잉

       

      앞서 배운 변수 내로잉과 같이 객체 타입에서도 내로잉이 가능하다.

       

      // 명시된 객체 타입의 유니언
      type PoemWithPages = {
      	name : string;
          pages : number;
      };
      
      type PoemWithRhymes = {
      	name : string;
          rhymes : boolean;
      };
      
      type Poem = PoemWithPages | PoemWithRhymes;
      
      cosnt poem = Math.random() > 0.5
      	? {name : "AA", pages : 120}
          : {name : "BB", rhymes : true}
      
      
      // 객체 타입 내로잉
      if ("pages" in poem){
      	poem.pages; // ok 명시적 선언을 했기 때문
      } else {
      	poem.rhymes; // ok 명시적 선언을 했기 때문
      }
      // 이렇게 나온 결과를 판별된 유니언이라고 한다

       

      📍교차 타입

       

      타입 스크립트 유니언 타입은 둘 이상의 다른 타입 중 하나의 타입이 될 수 있다를 의미한다.

      JS의 런타임 논리연산자가 & 연산자에 대응하는 역할을 하는 것처럼, TS에서도 & 교차타입을 사용해 여러 타입을 동시에 나타냄

      교차 타입은 유니언 타입과 결합할 수 있으며, 하나의 타입으로 판별된 유니언 타입을 설명하는데 유용하다.

       

      type Artwork = {
      	genre : string;
          name : string;
      };
      
      type Writing = {
      	pages : number;
          name : string;
      };
      
      // 교차타입 사용
      type WrittenArt = Artwork & Writing;
      
      // 다음과 같음;
      {
      	gerne : string;
          name : string;
          pages : number;
      }

       

      교차 타입의 위협성

       

      교차 타입은 컴파일러를 혼동시키는 방식으로 사용하기 쉽다

      교차 타입을 사용할 때는 가능한 한 코드를 간결하게 유지

       

       

       

       

       

       

       

      반응형

      'codeStates front-end > Typescript' 카테고리의 다른 글

      [TS] 클래스  (0) 2023.03.20
      [TS] 인터페이스  (0) 2023.03.12
      [TS] 배열과 튜플  (0) 2023.03.12
      [TS] 함수  (0) 2023.03.12
      [TS] 타입 시스템, 유니언과 리터럴  (0) 2023.03.06

      댓글

    Designed by Tistory.