Angular. Ferdinand Malcher

Angular - Ferdinand Malcher


Скачать книгу
2015 bietet ein ähnliches Konstrukt: Die Schlüsselwörter get und set verstecken die Methoden, indem eine Eigenschaft an diese gebunden wird. Wird die Eigenschaft gelesen, so wird die dazugehörige Getter-Methode aufgerufen. Beim Befüllen der Eigenschaft mit Werten wird die dazugehörige Setter-Methode aufgerufen.

      Praktisch benötigen wir Getter und Setter relativ selten, denn üblicherweise greifen wir immer direkt auf die Eigenschaften einer Klasse zu. Wollen wir allerdings beim Zugriff eine Berechnung durchführen und auf einen Methodenaufruf verzichten, so eignen sich Getter und Setter gut, wie das folgende Beispiel zeigt:

      class User {

      firstname: string;

      lastname: string;

      get fullname(): string {

      return this.firstname + ' ' + this.lastname;

      }

      set fullname(name: string) {

      const parts = name.split(' ');

      this.firstname = parts[0];

      this.lastname = parts[1];

      }

      }

      const user = new User();

      user.fullname = 'Erika Mustermann';

      console.log(user.fullname); // Erika Mustermann

      console.log(user); // { firstname: 'Erika', lastname: 'Mustermann' }

      Listing 4–5 Klasse mit Getter- und Setter-Methoden

       Konstruktoren

      Der Konstruktor ist eine besondere Methode, die bei der Instanziierung einer Klasse aufgerufen wird. Er muss immer den Namen constructor() tragen. Der Konstruktor eignet sich dazu, Werte zu empfangen, die für die spätere Verwendung benötigt werden. Solche Werte speichern wir meist in gleichnamigen Propertys der Klasse ab.

      private id: number;

       constructor(id: number) {

       this.id = id;

       }

      }

      const myUser = new User(3);

      Listing 4–6 Klasse mit Konstruktor

       Kurzschreibweise für den Konstruktor

      TypeScript bietet für diese Syntax eine Kurzschreibweise. Wenn wir in der Methodensignatur des Konstruktors für das Argument einen Zugriffsmodifizierer wie public oder private verwenden, so wird das zugehörige Property automatisch deklariert und initialisiert. Das folgende Codebeispiel führt zum selben Ergebnis wie in Listing 4–6 – ist aber wesentlich kürzer.

      class User {

      constructor(private id: number) {}

      }

      Listing 4–7 Konstruktor – vereinfachte Initialisierung von Eigenschaften

       Einschränkung: Nur ein Konstruktor pro Klasse

      In TypeScript ist nur ein Konstruktor pro Klasse zugelassen. Es ist also nicht möglich, wie in Java oder C# einen Konstruktor mit unterschiedlichen Signaturen anzulegen.

       Vererbung

      Die Funktionalität einer Klasse kann auf andere Klassen übertragen werden. Dieses Konzept kommt aus der objektorientierten Programmierung und heißt Vererbung. Mit dem Schlüsselwort extends kann eine Klasse von einer anderen erben. Am Beispiel der Klasse User wird die Spezifizierung PowerUser erstellt.

      class PowerUser extends User {

      constructor(id: string, power: number) {

       super(id);

      }

      }

      Listing 4–8 Vererbung

      Mit super() kann der Konstruktor der Basisklasse ausgeführt werden. Wird eine Klasse von einer anderen abgeleitet, so können auch Methoden der Basisklasse überschrieben werden. Wird eine abgeleitete Klasse instanziiert, so erhält man von außen auch Zugriff auf Eigenschaften und Methoden der übergeordneten Klassen (sofern diese nicht als private oder protected deklariert wurden).

       4.5Interfaces

       Format eines Konstrukts definieren

      Um die Typisierung in unserem Programmcode konsequent umzusetzen, stellt TypeScript sogenannte Interfaces bereit. Interfaces dienen dazu, die Struktur eines Objekts grundsätzlich zu definieren. Wir können explizit bestimmen, welche Teile enthalten sein müssen und welche Typen sie besitzen sollen. Optionale Eigenschaften werden durch ein Fragezeichen-Symbol gekennzeichnet. Im nachfolgenden Beispiel sehen wir, dass das Interface die Angabe eines Vornamens und Nachnamens erfordert. Das Alter hingegen ist optional und muss nicht angegeben werden.

      interface Contact {

      firstname: string;

      lastname: string;

       age?: number;

      }

      const contact: Contact = {

      firstname: 'Max',

      lastname: 'Mustermann'

      }

      Fügen wir dem Objekt eine zusätzliche Eigenschaft hinzu oder hat eine der Eigenschaften nicht den Typen, der im Interface definiert wurde, so erhalten wir einen Fehler.

       Interface für Klassen

      Interfaces können auch dafür verwendet werden, die Struktur einer Klasse vorzugeben. Dafür wird nach dem Klassennamen das Schlüsselwort implements angefügt, gefolgt vom Namen des Interface. Der Compiler wird nun signalisieren, dass wir alle definierten Eigenschaften und Methoden des Interface implementieren müssen.

      interface Human {

      name: string;

      age: number;

      }

      class Person implements Human {

      name = 'Erika';

      age = 25;

      }

       4.6Template-Strings

       Backticks, keine Anführungszeichen

      Mit einem normalen String in einfachen Anführungszeichen ist es nicht möglich, einen Text über mehrere Zeilen anzugeben. Ab ECMAScript 2015 gibt es allerdings auch die Möglichkeit, Template-Strings im Code zu nutzen. Ein Template-String wird mit schrägen `Hochkommata` (auch Accent grave oder Backtick) eingeleitet und beendet, nicht mit Anführungszeichen. Der String kann sich schließlich über mehrere Zeilen erstrecken und endet erst beim schließenden Backtick.

       Ausdrücke in Strings einbetten


Скачать книгу