TypeScript. 타입 종류(객체타입)

cm·2024년 1월 24일

타입스크립트

목록 보기
5/9

타입 종류 (객체타입)

  • 객체에 대한 타입을 지정하는 방법이다.
  • 객체의 형태를 확인하여 (속성, 타입) 객체를 할당해야 한다. (중첩 객체도 마찬가지이다.)

1. 정의

  • 필수속성 : 반드시 기입해야 하는 속성
  • 선택속성 : 생략해도 되는 속성(?으로 표기)
    • 생략시 선택 속성의 디폴트값 : undefined
    let person : {id : number, name? : string};

2. 할당 가능성

  • 초과속성 검사 : SuppressExcessPropertyError 또는 freshness(ExcessPropertyCheck)로 검사여부 가능
    • SuppressExcessPropertyError = False: Freshness 허용
    • SuppressExcessPropertyError = true : 초과속성에 대한 에러 미발생
      // 타입
      type TUser = { id: number; name: string };
      type TUser2 = { id: number; name: string; addr?: string };
      const Person = { id: 2, name: "kim", addr: "seoul" };
      // 객체
      const kim: TUser = { id: 2, name: "kim", addr: "seoul" }; // Error : freshness
  • fresh off 방법 : 강제로 타입단언, 이미 선언된 객체를 변수에 대입

    • 타입단언 : 컴파일러에게 내가 이 타입에 대해 정확히 알고 있다고 알려주는 방법

      // <타입>객체 or 객체 as 타입
      const kim: TUser = { id: 2, name: "kim", addr: "seoul" } as TUser; // 통과 : 타입단언
      
    • 이미 선언된 객체를 변수에 대입

      const kim: TUser = Person; // 통과 : 변수대입
  • 배열과 튜플에서의 fresh off 방법 🔥
    • 배열에는 1개의 변수만 대입되어도 그 타입에 대해서는 오류가 발생하지 않지만, 튜플에서는 튜플 정의상 각 다른 타입을 갖는 것을 허용하기에 요소 각각을 검사하여 각각의 타입에 모두 변수를 대입하거나 타입 단언을 해야한다.
// 객체배열
const arr: TUser[] = [{ id: 1, name: "kim", addr: "seoul" }]; // Error : freshness
const arr: TUser[] = [{ id: 2, name: "kim", addr: "seoul" }, Person]; // 통과 : 변수대입
const tuple: [TUser, TUser] = [{ id: 2, name: "kim", addr: "seoul" }, Person]; // Error : 튜플은 각각을 검사하므로 에러

// 객체튜플
const tuple: [TUser, TUser] = [{ id: 3, name: "kim", addr: "seoul" } as TUser, Person];
const Animal = { id: 2, name: "dog", addr: "seoul" };
const tuple: [TUser, TUser] = [Person, Animal];

3. 객체타입 유니언

  • 내로잉 : in 또는 판별값 사용한다.
    • in : 객체의 속성 존재 여부를 이용해 내로잉한다.
    • 판별값 : 리터럴 타입을 갖는 공통 속성의 판별값을 이용해 내로잉한다.
// in 사용
if ("type" in person) {
    poem.pages;
} else {
    poem.rhymes;
}
// 리터럴 판별값 사용 (판별된 유니언(내로잉) - 판별값 : page, 판별자 : poem.type === "pages")
if (poem.type === "pages") {
    // poem.type : 리터럴 타입을 갖는 공통 속성으로 다른 판별값을 가짐
    poem.pages;
} else {
    poem.rhymes;
}

4. 교차타입

  • 기존 타입을 결합하여 새로운 타입으로 생성한다. 일반적으로 객체 타입을 결합한다.
  • 권장 사항 : 코드가 복잡해질 경우 오류메세지를 읽기 어려우므로 최대한 간결하게 쓰는 것을 권장한다.
  • never : 원시타입이 2개 이상 교차되면 발생하는 타입. 코드에서 불가능한 상태를 나타낸다. (값을 가질 수도 없고 참조할 수도 없다.)
profile
나를 위한 기록

0개의 댓글