Modulelessen (1/2)
Klassen en modificatoren
TypeScript breidt standaard ES6-klassen uit met krachtige Object-Oriented Programming (OOP)-functies, zoals statisch typen, toegangsmodifiers en steno-parametereigenschappen.
Klassen en toegangsmodificatoren
In TypeScript kunt u de zichtbaarheid van klasseleden, eigenschappen en methoden beheren met behulp van drie hoofdsleutelwoorden:
public(standaard): het lid is overal toegankelijk.private: het lid is alleen toegankelijk binnen de klasse die het definieert.protected: het lid is toegankelijk binnen de klasse en zijn subklassen (overerving).
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;
}
}Parametereigenschappen
TypeScript biedt een verkorte syntaxis om een klasselid rechtstreeks in de constructor te declareren en te initialiseren. Door een constructorparameter vooraf te laten gaan door een toegangsmodifier, wordt de eigenschap automatisch gemaakt en toegewezen:
// This syntax does exactly the same as the previous example!
class Animal {
constructor(
public name: string,
private age: number,
) {}
}Interfaces implementeren
Een klasse kan een of meer interfaces implementeren met behulp van het trefwoord implements. Dit zorgt ervoor dat de klasse zich aan een specifiek contract houdt door alle vereiste methoden en eigenschappen te definiëren:
interface Flyable {
fly(altitude: number): void;
}
class Bird implements Flyable {
constructor(public name: string) {}
fly(altitude: number): void {
console.log(`${this.name} is flying at ${altitude} meters.`);
}
}Erfenis en super
TypeScript ondersteunt klassenovererving volledig. Een klasse kan een andere klasse uitbreiden met behulp van het trefwoord extends. Als de subklasse een constructor definieert, moet deze de constructor van de basisklasse aanroepen met behulp van de functie super() voordat toegang wordt verkregen tot this:
class Person {
constructor(public name: string) {}
}
class Student extends Person {
constructor(
name: string,
public grade: number,
) {
super(name); // Calls the Person constructor
}
}Probeer het zelf
Oefening 1: Autoklasse en privémodificator
Declareer een klasse met de naam Auto. Er moet een alleen-lezen modeleigenschap (string) zijn gedefinieerd in de constructor, een privé-kilometereigenschap (nummer) geïnitialiseerd op 0, een openbare methode drive(miles: number): void die de kilometerstand met mijlen verhoogt, en een getter of methode getMileage(): getal dat de kilometerstand retourneert.
Toon hint
Gebruik privékilometers: getal = 0; om de variabele privé te maken, en constructor(public readonly model: string) {} als afkorting.
Oplossing beschikbaar na 3 pogingen
Oefening 2: Vorminterface en cirkelklasse
Voltooi de code door de Circle-klasse te implementeren die de Shape-interface implementeert. De klasse moet een alleen-lezen eigenschap radius (number) hebben die is ingesteld via de constructor, en getArea(): number (retourneert Math.PI * radius * radius).
Toon hint
Gebruik implements Shape in de Circle-klasse en definieer de getArea(): number-methode.
Oplossing beschikbaar na 3 pogingen
Oefening 3: Abstracte voertuigklasse en motorfietssubklasse
Declareer een klasse met de naam Motorcycle die een uitbreiding is van de abstracte klasse Vehicle. Het moet de start()-methode implementeren om de string 'Motorcycle' terug te geven, gevolgd door make (this.make) en 'started'.
Toon hint
Gebruik klasse Motorcycle extends Vehicle en implementeer de start(): string-methode die de juiste string retourneert.
Oplossing beschikbaar na 3 pogingen
Oefening 4: Parametereigenschappen en overerving
Maak een klasse met de naam Employee die een alleen-lezen eigenschaps-id (nummer) en een openbare eigenschapsnaam (tekenreeks) definieert met behulp van de constructor-afkorting. Maak vervolgens een klasse Ontwikkelaar die Werknemer uitbreidt en via de constructor een openbare vastgoedafdeling (string) toevoegt.
Toon hint
Gebruik super(id, name) in de Developer-constructor en gebruik de publieke afdeling om de eigenschap via de constructor te definiëren.
Oplossing beschikbaar na 3 pogingen