옵셔널이란 기존 타입에 undefined가 유니언된 것과 같습니다. 기존 타입 | undefined가 기존 타입보다 넓은 타입이므로 옵셔널인 객체가 더 넓은 타입입니다.

    배열과 다르게 객체에서는 속성에 readonly가 붙어도 서로 대입할 수 있습니다.

    type ReadOnly = {
      readonly a: string;
      readonly b: string;
    };
    type Mandatory = {
      a: string;
      b: string;
    };
    const o: ReadOnly = {
      a: 'hi',
      b: 'world',
    };
    const m: Mandatory = {
      a: 'hello',
      b: 'world',
    };
    const o2: ReadOnly = m;
    const m2: Mandatory = o;
    

    이렇게 넓은 타입, 좁은 타입만 구분할 수 있다면 누가 누구에게 대입할 수 있는지 없는지를 쉽게 판단할 수 있습니다.

    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.