typescript - Flera/sammansatta returtyper


Gör detta

function foo(): () => void | string

betyder, det

a) funktionen foo kan returnera en sträng, eller en annan funktion som inte returnerar något; eller

b) funktionen foo returnerar en annan funktion, som i sin tur kanske returnerar en sträng eller inte?

Hur anger man också korrekt och tydligt det andra alternativet (vilket som helst som är fel)?

Svar #1

function foo():() => void | string : foo är en funktion som inte har några inmatningsparametrar och den kommer att returnera en annan funktion vars resultat kommer att vara void eller string

function foo(): void | string : foo är en funktion som inte har några inparameter och den kommer att returnera void eller string

function foo(): (() => void) | string : foo är en funktion som inte har några inmatningsparametrar och den kommer att returnera en sträng eller en annan funktion som returnerar void

Svar #2

() => void | string är typen av en funktion som kan eller inte kan returnera en sträng, vilket inte verkar särskilt användbart eftersom en funktion som returnerar en sträng redan kan tilldelas () => void.

Om du ville ha "antingen en funktion eller en sträng" bör du använda parenteser: (() => void) | string, på samma sätt som du skulle använda parenteser i alla andra fall där du vill använda operatorer som inte är i ordning av prioritet.