void en never in TypeScript zijn verschillende types:
Voorbeelden:
function log(message: string): void { console.log(message); } function throwError(message: string): never { throw new Error(message); } function infinite(): never { while (true) {} }
never wordt vaak gebruikt om de volledigheid van switch-case op types te controleren:
type Shape = { kind: 'circle' } | { kind: 'square' }; function getArea(shape: Shape) { switch (shape.kind) { case 'circle': return 1; case 'square': return 2; default: const _exhaustive: never = shape; // De compiler zal hier aangeven als er een case is gemist } }
Kunnen void en never verwisselbaar worden gebruikt als retourtypes van functies?
Antwoord: Nee. Een functie met het type void retourneert undefined of retourneert niets, maar beëindigt de uitvoering. Een functie met het type never eindigt nooit succesvol (gooit een fout of gaat in een oneindige lus).
Voorbeeld:
const fn: () => never = () => { // return; // Fout: Een functie waarvan het gedeclareerde type 'never' is, mag niet retourneren. };
Geschiedenis
In het analytische systeem werd de validatiefunctie getypeerd met het retourtype void, hoewel deze altijd een uitzondering gooide. Dit leidde ertoe dat ontwikkelaars dachten dat de functie "kon terugkeren", en ze voerden geen verdere controles uit, waardoor ze foutafhandelingsmechanismen over het hoofd zagen en de aanroepketen verkeerd implementeerden.
Geschiedenis
In een van de TypeScript-projecten werd een functie die een strikt getypeerd retourtype verwachte, gedefinieerd als een die never teruggeeft in plaats van void. Dit leidde ertoe dat een poging om een functie aan te roepen met een callback die als never was getypeerd fouten in de compilatie en verlies van API-compatibiliteit veroorzaakte.
Geschiedenis
In de backend-module gooide men eerder een uitzondering via een functie met het retourtype void. Na de migratie naar TypeScript waarschuwde de compiler niet voor het verlaten van de code na het aanroepen van deze functie, wat leidde tot overbodige regels "onbereikbare" code — en alleen door het retournerende type te wijzigen in never konden dergelijke plekken worden ontdekt en de code schoner gemaakt, waardoor logische fouten werden voorkomen.