Lekcje modułu (1/2)
Klasy i Modyfikatory
TypeScript rozszerza standardowe klasy z ES6 o potężne mechanizmy paradygmatu programowania obiektowego (OOP), takie jak statyczne typowanie, modyfikatory dostępu i skróty właściwości parametrów.
Klasy i Modyfikatory Dostępu
W TypeScript możesz kontrolować widoczność elementów, właściwości i metod za pomocą trzech głównych słów kluczowych:
public(domyślnie): element jest dostępny z dowolnego miejsca.private: element jest dostępny wyłącznie wewnątrz klasy, która go definiuje.protected: element jest dostępny wewnątrz klasy oraz w jej podklasach (dziedziczenie).
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;
}
}Właściwości parametrów (Parameter Properties)
TypeScript oferuje skróconą składnię do deklarowania i inicjalizowania właściwości klasy bezpośrednio w konstruktorze. Dodanie modyfikatora dostępu przed parametrem konstruktora sprawia, że właściwość jest automatycznie tworzona i przypisywana:
// Ta składnia robi dokładnie to samo, co poprzedni przykład!
class Animal {
constructor(
public name: string,
private age: number,
) {}
}Implementowanie Interfejsów
Klasa może implementować jeden lub więcej interfejsów przy użyciu słowa kluczowego implements. Gwarantuje to, że klasa spełnia określony kontrakt poprzez zdefiniowanie wszystkich wymaganych metod i właściwości:
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.`);
}
}Dziedziczenie i super
TypeScript w pełni obsługuje dziedziczenie klas. Klasa może rozszerzać inną klasę za pomocą słowa kluczowego extends. Jeśli podklasa definiuje konstruktor, musi on wywołać konstruktor klasy bazowej za pomocą funkcji super() przed uzyskaniem dostępu do this:
class Person {
constructor(public name: string) {}
}
class Student extends Person {
constructor(
name: string,
public grade: number,
) {
super(name); // Chiama il costruttore di Person
}
}Spróbuj sam
Ćwiczenie 1: Klasa Car i modyfikator Private
Zadeklaruj klasę o nazwie Car. Powinna posiadać zdefiniowaną w konstruktorze właściwość tylko do odczytu model (string), prywatną właściwość mileage (liczba) zainicjalizowaną na 0, publiczną metodę drive(miles: number): void, która zwiększa mileage o miles, oraz getter lub metodę getMileage(): number zwracającą mileage.
Pokaż wskazówkę
Użyj private mileage: number = 0;, aby uczynić zmienną prywatną, oraz constructor(public readonly model: string) {} jako skrótu.
Rozwiązanie dostępne po 3 próbach
Ćwiczenie 2: Interfejs Shape i klasa Circle
Uzupełnij kod, implementując klasę Circle, która implementuje interfejs Shape. Klasa powinna mieć właściwość tylko do odczytu radius (liczba) ustawianą przez konstruktor oraz implementować getArea(): number (zwracającą Math.PI * radius * radius).
Pokaż wskazówkę
Użyj implements Shape przy klasie Circle i zdefiniuj metodę getArea(): number.
Rozwiązanie dostępne po 3 próbach
Ćwiczenie 3: Klasa abstrakcyjna Vehicle i podklasa Motorcycle
Zadeklaruj klasę o nazwie Motorcycle, która rozszerza klasę abstrakcyjną Vehicle. Musi implementować metodę start() zwracającą napis 'Motorcycle ' po którym następuje marka (this.make) oraz ' started'.
Pokaż wskazówkę
Użyj class Motorcycle extends Vehicle i zaimplementuj metodę start(): string zwracającą odpowiedni napis.
Rozwiązanie dostępne po 3 próbach
Ćwiczenie 4: Parameter Properties i dziedziczenie
Utwórz klasę o nazwie Employee, która definiuje właściwość tylko do odczytu id (liczba) oraz publiczną właściwość name (string) za pomocą skrótu w konstruktorze. Następnie utwórz klasę Developer, która rozszerza Employee i dodaje publiczną właściwość department (string) w konstruktorze.
Pokaż wskazówkę
Użyj super(id, name) w konstruktorze Developer oraz użyj public department do zdefiniowania właściwości przez konstruktor.
Rozwiązanie dostępne po 3 próbach