Class Syntax

A class is defined using the class keyword. It contains a constructor for initializing properties and methods to define behavior.

class Animal {
  name: string; // Public by default
  constructor(name: string) {
    this.name = name;
  }
  speak() {
    return `${this.name} makes a noise`;
  }
}

const dog = new Animal("Dog");
console.log(dog.speak()); // Dog makes a noise

Instance vs. Static Properties & Methods

class Animal {
  static species = "Mammal"; // Static property

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

  static info() {
    return `Animals belong to the ${this.species} category.`;
  }
}

console.log(Animal.species); // Mammal
console.log(Animal.info()); // Animals belong to the Mammal category.

const dog = new Animal("Dog");
// console.log(dog.species); Error: Static property is not accessible via instance

instanceof vs Object.getPrototypeOf()

class Animal {}
class Dog extends Animal {}

const dog = new Dog();

console.log(dog instanceof Dog); // true
console.log(dog instanceof Animal); // true
console.log(Object.getPrototypeOf(dog) === Dog.prototype); // true
console.log(Object.getPrototypeOf(Dog.prototype) === Animal.prototype); // true

console.log(dog.constructor === Dog); // true
console.log(dog.constructor === Animal); // false