메서드에 this를 직접 타이핑함으로써 에러를 해결했습니다. 다만 앞으로 추가할 모든 메서드에 this를 일일이 타이핑해야 하므로(this : Data & Methods) 중복이 발생합니다. 이럴 때 ThisType 타입을 사용하면 중복을 제거할 수 있습니다.

    type Data = { money: number };
    type Methods = {
      addMoney(amount: number): void;
      useMoney(amount: number): void;
    };
    type Obj = {
      data: Data;
      methods: Methods & ThisType<Data & Methods>;
    };
    const obj: Obj = {
      data: {
        money: 0,
      },
      methods: {
        addMoney(amount) {
          this.money += amount;
        },
        useMoney(amount) {
          this.money -= amount;
        }
      }
    };
    
    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.