代码之家  ›  专栏  ›  技术社区  ›  Sam Schick

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

  •  1
  • Sam Schick  · 技术社区  · 6 年前

    我有以下职能;

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

    它要么接受字符串并返回字符串,要么接受未定义并返回未定义,但从不接受字符串并返回未定义或接受未定义并返回字符串。我的想法是类型应该是 (void => void) & (string => string) 但这根本不符合我的要求;flow担心我没有指定输入是字符串还是未定义的,而我希望它能有效地分派到正确的类型。当我让flow推断类型时,它就推断 (void | string) => (string | void) ,太宽了。这个的正确签名是什么?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Alejandro    6 年前

    你可以定义 generic 作为 string void :

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

    但是,它应该返回通过的arg,而不是 undefined . Try .