Los tipos de clases y la herencia se añadieron a TypeScript para soportar patrones de programación orientada a objetos, comunes en otros lenguajes (Java, C#). TypeScript permite crear clases con tipos de propiedades y métodos explícitamente definidos, así como implementar la herencia con seguridad de tipos.
Sin tipificación explícita en JavaScript, los errores relacionados con el uso incorrecto de propiedades no se detectan en la etapa de compilación. Los problemas surgen al sobrescribir métodos/propiedades en las subclases, al romper el contrato de la clase base y al trabajar incorrectamente con protected/private.
TypeScript permite usar las palabras clave public, private, protected, especificar de manera explícita los tipos de propiedades y métodos, heredar clases mediante extends e implementar interfaces.
Ejemplo de código:
class Animal { public name: string; protected age: number; private secret: string = "hidden"; constructor(name: string, age: number) { this.name = name; this.age = age; } speak(): void { console.log(`${this.name} makes a sound.`); } } class Dog extends Animal { constructor(name: string, age: number) { super(name, age); } speak(): void { console.log(`${this.name} barks.`); } } const dog = new Dog("Rex", 4); dog.speak(); // Rex barks.
Características clave:
¿Qué pasará si no se especifica el tipo de un campo de clase?
TypeScript intentará inferir el tipo a partir del valor asignado, si existe. Si no, el tipo será any, lo que reduce la seguridad del código.
class Test { value; constructor(v: number) { this.value = v; } }
value será de tipo any, si no se asigna un valor por defecto, lo que representa una posible brecha en la seguridad de tipos.
¿Se puede cambiar el modificador de acceso de un método heredado?
Sí, pero solo reforzándolo (por ejemplo, de public a protected o private - no se puede), pero de private a public no se puede, ya que un miembro private no se hereda. Esto resultará en un error de compilación.
¿Se puede heredar de múltiples clases en TypeScript?
No, la herencia múltiple de clases está prohibida. Se pueden implementar múltiples interfaces, pero solo uno puede extender una clase.
En el proyecto, todas las clases se declaraban sin modificadores de acceso y tipos explícitos, para acelerar el desarrollo.
Pros:
Contras:
Todos los miembros de la clase están rigurosamente tipificados, se utilizan private/protected/public, y se mantiene una estricta tipificación de propiedades y métodos.
Pros:
Contras: