Murat Kazanova
Murat Kazanova

Reputation: 349

how to capture "this" in TypeScript

I even tried wrapping into a module but still failed to capture "this" on all attempts. The Javascript generated by the below Typescript doesn't resolve the this and it fails to return the desired result. How can i fix this issue in TypeScript?

var secretNumberGame = () => {
    var secretNumber: number = 21;
    var counter: number = 9;
    return {
        responses: {
            equal: "You are correct! Answer is " + secretNumber,
            lower: "Too high!",
            higher: "Too low!"
        },
        guess: (guess: number) => {
            counter++;
            var key = (guess == secretNumber) ? "equal" : (
                (guess < secretNumber ? "higher" : "lower"));
            console.log(this.responses[key]);
            return counter;
        }
    }
}
var game = secretNumberGame();
console.log(game.guess(45));
console.log(game.guess(18))
console.log(game.guess(21));

Upvotes: 2

Views: 1672

Answers (1)

basarat
basarat

Reputation: 275867

Please just use a function and not ()=>:

var secretNumberGame = () => {
    var secretNumber: number = 21;
    var counter: number = 9;
    return {
        responses: {
            equal: "You are correct! Answer is " + secretNumber,
            lower: "Too high!",
            higher: "Too low!"
        },
        guess: function (guess: number) {
            counter++;
            var key = (guess == secretNumber) ? "equal" : (
                (guess < secretNumber ? "higher" : "lower"));
            console.log(this.responses[key]);
            return counter;
        }
    }
}
var game = secretNumberGame();
console.log(game.guess(45));
console.log(game.guess(18))
console.log(game.guess(21));

Here are some docs on the fat arrow : http://basarat.gitbooks.io/typescript/content/docs/arrow-functions.html

Upvotes: 3

Related Questions