Typescript también puede tipar clases:

class User {
  name: string;
  email: string;

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

Y además Typescript nos da una serie de keywords que nos ayuda mucho en los atributos y métodos de la clase, en concreto estos:

  • public: Para declarar que algo se puede usar de forma pública desde fuera, este es el de por defecto si no indicas nada.
  • protected: Para declarar que algo solo se puede usar por la propia instancia y las subclases
  • private: Para declarar que algo solo se puede usar por la propia instancia, no se puede acceder desde fuera.

Estas keywords ya te sonarán de otros lenguajes orientados a objetos como Java. Ejemplo:

class User {
  public name: string;
  private email: string;

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

Recuerda que Typescript funciona en tiempo de desarrollo. Cuando este código compile la propiedad email podrá ser usada desde fuera y podrás verla si inspeccionas el código usando breakpoints.

Pero ojo, porque en versiones recientes de Javascript ya se soporta los atributos privados y con Typescript también funcionan:

class User {
  public name: string;
  #email: string;

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

En este caso el atributo name sí que es privado incluso en tiempo de ejecución.

Typescript también soporta la keyword de readonly para indicar que una propiedad será solo de lectura:

class User {
  public name: string;
  private readonly email: string;

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

Por último, decir que Typescript tiene una manera más cómoda de declarar los atributos de las clases, simplemente tienes que poner alguna de las keywords que hemos visto antes de public, protected y private dentro del constructor, así no necesitas ponerlas fuera y además no tienes que inicializar sus valores con los del constructor:

class User {
  constructor(public name: string, private email: string) {}
}

Typescript al compilar sacará el siguiente código:

class User {
  constructor(name, email) {
    this.name = name;
    this.email = email;
  }
}