typescript - 複数/複合の返り値の型
これはしますか
function foo(): () => void | string
ということは、それ
a) 関数fooは文字列を返すか、何も返さない別の関数を返す場合があります。
b) 関数fooは別の関数を返し、その関数は文字列を返す場合もあれば返さない場合もありますか?
また、もう一方の選択肢(どちらが間違っているか)を正確かつ明確にどのように表記しますか?
回答 #1
function foo():() => void | string : foo は入力パラメータを持たない関数で、その結果は void または string になる別の関数を返します
function foo(): void | string:fooは入力パラメータを持たず、voidまたはstringを返す関数です
function foo(): (() => void) | string : foo は入力パラメータを持たない関数で、string または void を返す別の関数を返します
回答 #2
`() => void | string` は文字列を返す場合も返さない場合もある関数の型ですが、文字列を返す関数はすでに `() => void` に代入可能であるため、あまり役に立たないように見えます。
もし「関数か文字列のどちらか」を望むなら、括弧を使うべきです:(() => void) | string。これは、演算子の優先順位通りに使いたくない他のケースでも括弧を使うのと同じ方法です。