接受字符串并返回字符串或接受void并返回void的函数的类型是什么?

时间:2018-11-29 14:18:14

标签: javascript flowtype

我具有以下功能;

const capitalize = (input) =>
    (!(typeof input === 'undefined'))
        ? input
            .split(' ')
            .map(capitalizeWord)
            .join(' ')
        : undefined

这要么接受一个字符串,然后返回一个字符串,要么接受未定义,然后返回未定义,但是从不接受字符串,然后返回未定义,或者接受未定义,然后返回一个字符串。我的想法是类型应该像(void => void) & (string => string)之类,但这根本不符合我的期望。 Flow担心我没有指定要大写输入是字符串还是未定义的内容,而要执行的操作实际上是将其分派到正确的类型。当我让flow仅推断类型时,它推断(void | string) => (string | void),它太宽泛了。正确的签名是什么?

1 个答案:

答案 0 :(得分:2)

您可以将generic定义为stringvoid

const capitalize = <T: string | void>(input: T): T =>
        (!(typeof input === 'undefined')) ? input
            .split(' ')
            .join(' ')
        : input

但是,它应该返回传递的arg,而不是undefinedTry