我有以下职能;
const capitalize = (input) => (!(typeof input === 'undefined')) ? input .split(' ') .map(capitalizeWord) .join(' ') : undefined
它要么接受字符串并返回字符串,要么接受未定义并返回未定义,但从不接受字符串并返回未定义或接受未定义并返回字符串。我的想法是类型应该是 (void => void) & (string => string) 但这根本不符合我的要求;flow担心我没有指定输入是字符串还是未定义的,而我希望它能有效地分派到正确的类型。当我让flow推断类型时,它就推断 (void | string) => (string | void) ,太宽了。这个的正确签名是什么?
(void => void) & (string => string)
(void | string) => (string | void)
你可以定义 generic 作为 string 或 void :
string
void
const capitalize = <T: string | void>(input: T): T => (!(typeof input === 'undefined')) ? input .split(' ') .join(' ') : input
但是,它应该返回通过的arg,而不是 undefined . Try .
undefined