Ein Hinweis zur Leere in JavaScript und TypeScript

Wenn Sie, bevor Sie sich für JavaScript interessierten, in traditionellen Sprachen mit starker Typisierung geschrieben haben, sind Sie möglicherweise mit dem Konzept der void vertraut. Dies ist der Typ, dessen Verwendung dem Programmierer mitteilt, dass die entsprechenden Funktionen und Methoden beim Aufruf nichts zurückgeben.



Die void Entität ist auch in JavaScript und TypeScript verfügbar. In JS ist dies ein Operator. In TS ist dies ein primitiver Datentyp. Und hier und da verhält sich void nicht so, wie es viele von denen erwarten würden void in anderen Sprachen auf void gestoßen sind.

JavaScript void-Anweisung


In JavaScript wertet der void Operator den an ihn übergebenen Ausdruck aus. Unabhängig davon, welcher Ausdruck ausgewertet wird, gibt void immer undefined .

 let i = void 2; // i === undefined 

Warum brauchen wir einen solchen Operator?
Zunächst sollte beachtet werden, dass Entwickler in den ersten Jahren der JS-Programmierung undefined Werte neu undefined und jeden Wert darauf schreiben konnten. Aber void immer den wahren Wert von undefined .

Zweitens ist die Verwendung des void Operators eine interessante Möglichkeit, mit sofort aufgerufenen Funktionen zu arbeiten:

 void function() {  console.log('What') }() 

Und das alles - ohne Verschmutzung des globalen Namespace:

 void function aRecursion(i) {  if(i > 0) {    console.log(i--)    aRecursion(i)  } }(3) console.log(typeof aRecursion) // undefined 

Da der void Operator immer undefined zurückgibt und den an ihn übergebenen Ausdruck immer auswertet, haben wir eine sehr ausdrucksstarke Möglichkeit, von der Funktion zurückzukehren, ohne einen Wert zurückzugeben, aber mit einem Aufruf, zum Beispiel einem Rückruf:

 //  -  undefined      function middleware(nextCallback) {  if(conditionApplies()) {    return void nextCallback();  } } 

Dies führt uns zu dem wichtigsten Weg, void zu verwenden. Dieser Operator ist eine Art "Wachposten" -Anwendung. Sollte eine bestimmte Funktion immer undefined , kann dies mit dem void Operator erreicht werden.

 button.onclick = () => void doSomething(); 

Leerer Datentyp in TypeScript


Der Typ void in TypeScript kann als das Gegenteil von type any . Funktionen in JavaScript geben immer etwas zurück. Dies kann entweder ein vom Programmierer festgelegter oder undefined Wert sein:

 function iHaveNoReturnValue(i) {  console.log(i) } //  undefined 

Da JavaScript-Funktionen, von denen nichts explizit zurückgegeben wird, immer undefined , ist void in TypeScript der geeignete Typ, um Entwicklern mitzuteilen, dass die Funktion undefined zurückgibt:

 declare function iHaveNoReturnValue(i: number): void 

Die void Entität in Form eines Typs kann auch für Parameter und andere Variablendeklarationen verwendet werden. Der einzige Wert, der immer an den void-Parameter übergeben werden kann, ist undefined .

 declare function iTakeNoParameters(x: void): void iTakeNoParameters() //  iTakeNoParameters(undefined) //  iTakeNoParameters(void 2) //  

Infolgedessen stellt sich heraus, dass in TS die void und undefined Typen fast dasselbe sind. Aber es gibt einen kleinen Unterschied zwischen ihnen, der in der Tat äußerst wichtig ist. Der zurückgegebene void kann durch andere Typen ersetzt werden, sodass Sie erweiterte Muster für die Arbeit mit Rückrufen implementieren können.

 function doSomething(callback: () => void) {  let c = callback() // callback   undefined  // c -  undefined } //     function aNumberCallback(): number {  return 2; } // ;    doSometing doSomething(aNumberCallback) 

Entwickler erwarten, dass solche Designs, die häufig in JS-Anwendungen verwendet werden, genau das tun. Hier ist das Material zu diesem Thema.

Wenn eine Funktion nur Funktionen akzeptieren soll, die undefined , können Sie die Methodensignatur entsprechend ändern:

 //  // function doSomething(callback: () => void) { //  function doSomething(callback: () => undefined) { /* ... */ } function aNumberCallback(): number { return 2; } //  -    doSomething(aNumberCallback) 

Zusammenfassung


Der void Operator in JavaScript und der void Datentyp in TypeScript sind ziemlich einfache Entitäten. Der Bereich der Situationen, in denen sie anwendbar sind, ist begrenzt. Es sollte jedoch beachtet werden, dass der Programmierer, der sie verwendet, höchstwahrscheinlich keine Probleme bei der Arbeit mit ihnen hat.

Liebe Leser! Verwenden Sie void in JS und TS?


Source: https://habr.com/ru/post/de468229/


All Articles