WalzoneInterview Prep
📞 Interviewing soon? Practice with a realistic AI mock phone interview — it calls you, then scores you. First 15 min FREE →

TypeScript · Advanced · question 57 of 100

Can you explain how ’this’ works in TypeScript?

📕 Buy this interview preparation book: 100 TypeScript questions & answers — PDF + EPUB for $5

The ‘this‘ keyword in TypeScript (and JavaScript) refers to the context in which a function is called. The value of ‘this‘ is determined at runtime, when the function is invoked. In this explanation, we’ll cover how ‘this‘ works in different scenarios in TypeScript.

1. **Global context**: When a function is invoked outside of any class or object, ‘this‘ refers to the global object (‘window‘ in browsers, ‘global‘ in Node.js). Here’s an example:

function globalThisExample() {
  console.log(this);
}

globalThisExample(); // Output: Window (or global in a Node.js environment)

2. **Object context**: When a method is called on an object, ‘this‘ refers to the object that the method is a property of.

class Animal {
  name: string;

  constructor(name: string) {
    this.name = name;
  }

  speak() {
    console.log(`Hello, my name is ${this.name}.`);
  }
}

const dog = new Animal('Buddy');
dog.speak(); // Output: Hello, my name is Buddy.

In the ‘speak‘ method, ‘this‘ refers to the ‘dog‘ instance of the ‘Animal‘ class.

3. **Class context**: In a class, ‘this‘ refers to the instance of that class.

class Counter {
  private value: number = 0;

  increment() {
    this.value++;
    console.log(`Counter value: ${this.value}`);
  }
}

const myCounter = new Counter(); myCounter.increment(); // Output: Counter value: 1 “‘

4. **Using ‘bind‘, ‘call‘, and ‘apply‘**: One can explicitly set the value of ‘this‘ for a specific function using the ‘bind‘, ‘call‘, or ‘apply‘ methods.

const person = { name: 'Alice' };

function greet() {
  console.log(`Hello, I'm ${this.name}.`);
}

const boundGreet = greet.bind(person);
boundGreet(); // Output: Hello, I'm Alice.

greet.call(person); // Output: Hello, I'm Alice.

greet.apply(person); // Output: Hello, I'm Alice.

5. **Arrow functions**: Arrow functions use lexical scoping for ‘this‘, which means ‘this‘ inside an arrow function is the same as its containing (outside) function.

class Timer {
  private timeout: number;

  constructor() {
    this.timeout = 1000;
  }

  start() {
    setTimeout(() => {
      console.log(`Timeout: ${this.timeout}ms`);
    }, this.timeout);
  }
}

const myTimer = new Timer();
myTimer.start(); // Output: Timeout: 1000ms

In the ‘start‘ method, the arrow function retains the value of ‘this‘ from the surrounding context (the instance of the ‘Timer‘ class).

To sum up, the ‘this‘ keyword in TypeScript refers to the context in which a function is called. This value depends on how the function is invoked, which can vary depending on whether it’s called globally, on an object, using ‘bind‘, ‘call‘, or ‘apply‘, or within an arrow function. Understanding these different contexts will help you effectively utilize the ‘this‘ keyword in your TypeScript code.

Reading is step one. Saying it out loud is the interview. Our AI interviewer calls your phone and runs a realistic TypeScript interview — then scores it.
📞 Practice TypeScript — free 15 min
📕 Buy this interview preparation book: 100 TypeScript questions & answers — PDF + EPUB for $5

All 100 TypeScript questions · All topics