You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

useMemo Hook的Flow类型问题:字符串数组声明类型报错

解决useMemo的Flow类型标注错误问题

你遇到的问题核心是类型不匹配:你给fruits标注的类型是() => Array<string>(一个返回字符串数组的函数),但useMemo实际返回的是工厂函数执行后的结果——也就是那个字符串数组本身,不是函数,所以Flow会提示数组和函数类型不兼容。

正确的写法有这几种:

  1. 直接标注数组类型
    把类型改成实际的数组类型Array<string>或者更简洁的string[]:

    // 写法1:用Array<string>
    const fruits: Array<string> = useMemo(() => ['Apples', 'Oranges', 'Bananas'], []);
    
    // 写法2:用string[](更常用)
    const fruits: string[] = useMemo(() => ['Apples', 'Oranges', 'Bananas'], []);
    
  2. 让Flow自动推断类型(推荐)
    如果你的工厂函数返回值很明确,Flow完全能自动推断出fruits的类型是string[],不需要手动标注:

    const fruits = useMemo(() => ['Apples', 'Oranges', 'Bananas'], []);
    
  3. 显式指定useMemo的泛型参数
    如果你想更明确地控制返回类型,可以给useMemo指定泛型:

    const fruits = useMemo<string[]>(() => ['Apples', 'Oranges', 'Bananas'], []);
    

本质上要记住:useMemo的作用是缓存工厂函数的返回值,而不是返回这个工厂函数本身,所以变量的类型应该和工厂函数的返回值类型一致,而不是函数类型。

内容的提问来源于stack exchange,提问作者Simon Long

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 00:07:42