useMemo Hook的Flow类型问题:字符串数组声明类型报错
解决useMemo的Flow类型标注错误问题
你遇到的问题核心是类型不匹配:你给fruits标注的类型是() => Array<string>(一个返回字符串数组的函数),但useMemo实际返回的是工厂函数执行后的结果——也就是那个字符串数组本身,不是函数,所以Flow会提示数组和函数类型不兼容。
正确的写法有这几种:
直接标注数组类型
把类型改成实际的数组类型Array<string>或者更简洁的string[]:// 写法1:用Array<string> const fruits: Array<string> = useMemo(() => ['Apples', 'Oranges', 'Bananas'], []); // 写法2:用string[](更常用) const fruits: string[] = useMemo(() => ['Apples', 'Oranges', 'Bananas'], []);让Flow自动推断类型(推荐)
如果你的工厂函数返回值很明确,Flow完全能自动推断出fruits的类型是string[],不需要手动标注:const fruits = useMemo(() => ['Apples', 'Oranges', 'Bananas'], []);显式指定useMemo的泛型参数
如果你想更明确地控制返回类型,可以给useMemo指定泛型:const fruits = useMemo<string[]>(() => ['Apples', 'Oranges', 'Bananas'], []);
本质上要记住:useMemo的作用是缓存工厂函数的返回值,而不是返回这个工厂函数本身,所以变量的类型应该和工厂函数的返回值类型一致,而不是函数类型。
内容的提问来源于stack exchange,提问作者Simon Long
相关产品推荐
相关产品推荐

