Lecciones del módulo (1/2)
Clases y Modificadores
TypeScript extiende las clases estándar de ES6 con potentes características del paradigma orientado a objetos (OOP), como el tipado estático, los modificadores de acceso y las propiedades abreviadas.
Clases y Modificadores de Acceso
En TypeScript, puedes controlar la visibilidad de miembros, propiedades y métodos usando tres palabras clave principales:
public(por defecto): el miembro es accesible desde cualquier lugar.private: el miembro es accesible solo dentro de la clase que lo define.protected: el miembro es accesible dentro de la clase y de sus subclases (herencia).
class Animal {
public name: string;
private age: number;
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
public getAge(): number {
return this.age;
}
}Propiedades Paramétricas (Parameter Properties)
TypeScript ofrece una sintaxis abreviada para declarar e inicializar miembros de una clase directamente en el constructor. Al agregar un modificador de acceso antes del parámetro del constructor, la propiedad se crea y se asigna automáticamente:
// ¡Esta sintaxis hace exactamente lo mismo que el ejemplo anterior!
class Animal {
constructor(
public name: string,
private age: number,
) {}
}Implementación de Interfaces
Una clase puede implementar una o más interfaces usando la palabra clave implements. Esto garantiza que la clase respete un contrato específico al definir todos los métodos y propiedades requeridos:
interface Flyable {
fly(altitude: number): void;
}
class Bird implements Flyable {
constructor(public name: string) {}
fly(altitude: number): void {
console.log(`${this.name} sta volando a ${altitude} metri.`);
}
}Herencia y super
TypeScript admite plenamente la herencia de clases. Una clase puede extender otra clase usando la palabra clave extends. Si la subclase define un constructor, este debe invocar al constructor de la clase base usando la función super() antes de poder acceder a this:
class Person {
constructor(public name: string) {}
}
class Student extends Person {
constructor(
name: string,
public grade: number,
) {
super(name); // Chiama il costruttore di Person
}
}Pruébalo tú
Ejercicio 1: Clase Car y Modificador Private
Declara una clase llamada Car. Debe tener una propiedad readonly model (cadena) definida en el constructor, una propiedad privada mileage (número) inicializada en 0, un método público drive(miles: number): void que incremente mileage en miles, y un getter o método getMileage(): number que devuelva mileage.
Mostrar pista
Usa private mileage: number = 0; para hacer la variable privada, y constructor(public readonly model: string) {} como abreviación.
Solución disponible después de 3 intentos
Ejercicio 2: Interfaz Shape y Clase Circle
Completa el código implementando la clase Circle que implemente la interfaz Shape. La clase debe tener una propiedad readonly radius (número) establecida mediante constructor, e implementar getArea(): number (devolviendo Math.PI * radius * radius).
Mostrar pista
Usa implements Shape en la clase Circle y define el método getArea(): number.
Solución disponible después de 3 intentos
Ejercicio 3: Clase Abstracta Vehicle y Subclase Motorcycle
Declara una clase llamada Motorcycle que extienda la clase abstracta Vehicle. Debe implementar el método start() para devolver la cadena 'Motorcycle ' seguida de la marca (this.make) y de ' started'.
Mostrar pista
Usa class Motorcycle extends Vehicle e implementa el método start(): string que devuelva la cadena correcta.
Solución disponible después de 3 intentos
Ejercicio 4: Parameter Properties y Herencia
Crea una clase llamada Employee que defina una propiedad de solo lectura id (número) y una propiedad pública name (cadena) mediante atajo en el constructor. Después de eso, crea una clase Developer que extienda Employee y agregue una propiedad pública department (cadena) mediante constructor.
Mostrar pista
Usa super(id, name) en el constructor de Developer y usa public department para definir la propiedad mediante el constructor.
Solución disponible después de 3 intentos