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

TypeScript type guard使用array reduce时类型推断错误问题

这不是TypeScript类型推断系统的bug,是类型推导的设计限制,具体原因如下:

  • 直接返回reduce执行结果的场景下,TypeScript的上下文类型反向推导出现了偏差:你定义的函数要求返回值为boolean类型(类型谓词params is Params本质就是返回boolean),当你直接把reduce的结果作为返回值时,TS需要同时做反向类型匹配和reduce泛型参数推导,过程中没有正确识别出reduce回调的返回类型始终为boolean,因此抛出类型错误。
  • 先将结果存入变量再返回的场景下,TS不需要做反向的上下文类型匹配:它会先独立推导reduce的返回类型,初始值是boolean类型的true,回调的所有返回分支也都是boolean值,因此推断出变量isValid的类型为boolean,返回该变量自然符合函数的返回类型要求。

你可以通过显式标注reduce的泛型参数,让直接返回的写法也能正常工作:

interface Params {
    a: string;
    b: number;
}

const paramKeys = ["a", "b"] as const;

// 显式指定reduce返回值类型为boolean即可正常运行
const isHydrationParamsValid = (params: any): params is Params => {
    return paramKeys.reduce<boolean>((_, curr) => {
        if (!params[curr]) {
            console.warn(`Hydration param ${curr} is missing`);
            return false;
        }
        return true;
    }, true);
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 15:36:03