addMoney나 useMoney 같은 메서드에서 this를 쓰고 싶은 상황입니다. 다만 이 예제에서 this는 obj 객체가 아니라 data와 methods 객체를 합친 타입입니다. 즉, this.data.money로 접근하는 것이 아니라 this.money로 바로 접근할 수 있게 하고 싶습니다. 메서드들도 this.methods.addMoney가 아니라 this.addMoney로 접근하려 합니다.
앞의 예제에 타입을 추가해보겠습니다.
type Data = { money: number };
type Methods = {
addMoney(this: Data & Methods, amount: number): void;
useMoney(this: Data & Methods, amount: number): void;
};
type Obj = {
data: Data;
methods: Methods;
};
const obj: Obj = {
data: {
money: 0,
},
methods: {
addMoney(amount) {
this.money += amount;
},
useMoney(amount) {
this.money -= amount;
}
}
};