首页 > 解决方案 > 接受字符串并返回字符串或接受 void 并返回 void 的函数的类型是什么?

问题描述

我有以下功能;

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

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

标签: javascriptflowtype

解决方案


您可以将泛型定义为stringvoid

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

但是,它应该返回传递的 arg,而不是undefined. 试试


推荐阅读