메서드에 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;
}
}
};