Programmiersprache: TypeScript 4.3 flexibilisiert den Zugriff auf Properties

Für das Setzen und Auslesen von Properties erlaubt die Programmiersprache neuerdings unterschiedliche Typdeklaration.

Lesezeit: 1 Min.
In Pocket speichern
vorlesen Druckansicht Kommentare lesen 24 Beiträge
Schreibmaschine, Tastatur, Keyboard, Digitalisierung

(Bild: , gemeinfrei)

Von
  • Rainald Menge-Sonnentag

Microsoft hat die erste Beta von TypeScript 4.3 veröffentlicht. Das Release erlaubt individuelle Typdeklarationen für Getter und Setter von Properties. Außerdem führt die Programmiersprache das Keyword override ein, um sicherzustellen, dass überschriebene Methoden in der Basisklasse existieren.

TypeScript erlaubt wie JavaScript und andere Programmiersprachen das Auslesen und Setzen von Properties über Getter und Setter. In JavaScript dienen sie häufig zum Umwandeln der übergebenen Werte, um beispielsweise den Inhalt einer Zahl als Zeichenkette zu übergeben, die der Getter konvertiert. In TypeScript ist das zwar ebenfalls möglich, schränkt aber die Typisierung ein. So ließe sich ein Property-Typ als unknown oder any festsetzen, was aber keine strikte Typüberprüfung beim Auslesen ermöglicht.

In TypeScript 4.3 dürfen daher die Aufrufe von get und set unterschiedliche Typdeklarationen erhalten. Auf die Weise können Entwicklerinnen und Entwickler im Setter mehrere Typen verarbeiten und umwandeln, während sie im Getter genau einen Typ zurückgeben.

class Beispiel {
  #wert = 0;

  // Der Setter erlaubt unterschiedliche Typen
  set wert(value: string | number) {
  // Wert umwandeln
    let num = Number(value);
  // Wert prüfen 
    if (Number.isFinite(num))
      this.#wert = num;
    else
      this.#wert = 0;   
  }

  // Der Getter gibt typsicher number zurück
  get wert(): number {
    return this.#wert;
  }


}

Als kleine, nachvollziehbare Einschränkung gilt, dass der Typ für das Auslesen der Property im Getter ein gültiger Typ für den Setter sein muss, damit eine Property stets sich selbst zugewiesen werden kann. Allgemein ist das Vorgehen nicht auf Klassen begrenzt, sondern lässt sich ebenso auf Interfaces anwenden.

Eine weitere Neuerung betrifft das Überschreiben von Funktionen, das in TypeScript ebenso wie in JavaScript ohne zusätzliche Kennzeichnung erlaubt ist. Das nun eingeführte Keyword override stellt allerdings sicher, dass die überschriebene Methode tatsächlich in der Basisklasse existiert. Das soll vermeiden, dass ein Refactoring der Basisklasse oder schlicht ein Tippfehler die überschriebenen Methoden ins Leere laufen lässt.

Standardmäßig lassen sich Methoden nach wie vor ohne explizite Angabe des Keywords überschreiben. Allerdings führt TypeScript 4.3 zusätzlich den Parameter --noImplicitOverride beim Kompilieren ein, der das implizite Überschreiben verbietet und das Kennzeichnen überschriebener Methoden durch override erzwingt.

Bisher konnten Entwicklerinnen und Entwickler in TypeScript-Klassen lediglich Properties durch # als privat kennzeichnen und so den Zugriff von außen verbieten. Mit dem aktuellen Release dürfen zusätzlich Methoden und Zugriffsfunktionen privat sein.

class Privates {
  #privateMethode() {
    //...
  }

  get #privaterWert() {
    return 1;
  }

  // Der Zugriff aus öffentlichen Methoden der Klasse ist erlaubt:
  oeffentlicherWert() {
    return this.#privaterWert;
  }
}

// Der Zugriff von außen führt zu Fehlern:

new Privates().#privateMethode();
//        ~~~~~~~~~~~
// error!
// Property '#privateMethode' is not accessible
// outside class 'Privates' because it has a private identifier.

new Foo().#privaterWert;
//        ~~~~~~~~~~
// error!
// Property '#privaterWert' is not accessible
// outside class 'Privates' because it has a private identifier.

Die Kennzeichnung als privat ist neuerdings ebenfalls für statische Elemente beziehungsweise Methoden erlaubt.

Weitere Neuerungen in TypeScript 4.3 wie die statischen Index-Signaturen und zusätzliche Ergänzungen für Template Literals beziehungsweise die in Version 4.1 eingeführten Template Literal Types lassen sich dem TypeScript-Blog entnehmen. Die Betaphase für TypeScript 4.3 ist auf gut sieben Wochen ausgelegt. Am 11. Mai 2021 soll der Release Candidate erscheinen, und für den 25. Mai steht das endgültige Release auf dem Plan.

(rme)