Das ist von Entwurf (ich werde erklären, warum es ist ein gutes Design in Kürze). Die Spezifikation sagt (in Abschnitt 3.6.3, für Klarheit gekürzt):
Ein Typ S ist zuordenbar einem Typ T und T zuweisbare von S, wenn einer der folgenden Punkte zutrifft ...
In diesem Fall sind wir testen , ob () => stringist zuordenbar () => void. Also entweder stringhat seine zuordenbar void(es ist nicht), oder voidmuss sein void(es ist).
In der Tat, hier die Regel dürfen Sie den Rückgabewert wegzuwerfen , die mit , wie zB C ++ behandelt konsistent ist voidin Vorlage Auflösung.
function decrementWidgetHeight(w: Widget): number {
// ... returns the new height of the widget
}
function applyToManyWidgets(w: Widget[], change: (x: Widget) => void): void {
// for each widget in the array, apply 'change' to it
}
// Later...
applyToManyWidgets(widgetsToShorten, decrementWidgetHeight); // Should be allowed?
Wenn wir die Art des einschränken changezu sein (widget) => void, wir machen es so , dass Sie passieren können decrementWidgetHeightals das zweite Argument , auch wenn es einen Rückgabewert hat, aber immer noch dafür sorgen , dass , wenn wir den Körper schreiben applyToManyWidgets, dass wir nicht aus Versehen der Verwendung Rückgabewert von changeüberall.
Beachten Sie, dass voidimmer noch anders ist , als anyweil dies unallowed:
function f() { }
var x = f(); // Disallowed, f() is of type 'void'