Ez tervezési (leírom, hogy miért ez a jó design rövidesen). A spec mondja (szakasz 3.6.3, rövidített érthetőség kedvéért):
A Type S hozzárendelhető egy T típusú T hozzárendeljük a S, ha az alábbiak közül melyik igaz ...
Ebben az esetben, tesztelés, ha () => stringhozzárendeljük a () => void. Tehát vagy stringkell lennie besorolható void(ez nem), vagy voidkell lennie void(ez).
Valójában a szabály itt is megengedett, hogy dobja el a visszatérési érték , ami összhangban van azzal, hogy hogyan pl C ++ kezeli voida sablon felbontásban.
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?
Amikor korlátozzák a típusú changelegyen (widget) => void, tesszük úgy, hogy akkor át decrementWidgetHeighta második érv ellenére, hogy a visszatérési érték, de még mindig ügyelve arra, hogy ha mi írjuk a testét applyToManyWidgets, nem véletlenül használja a visszatérési értéke changesehol.
Vegyük észre, hogy voidmég mindig más, mint anyazért, mert ez nem engedett:
function f() { }
var x = f(); // Disallowed, f() is of type 'void'