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

NGXS iif操作符报错:期望2个类型参数,实际仅传入1个

NGXS iif操作符类型参数错误解决方案

问题原因

NGXS的iif操作符要求传入2个泛型参数:第一个是当前状态的类型,第二个是更新后状态的类型。你只传了1个<any>,所以触发TypeScript的类型错误提示。

解决办法

有两种可行的修正方式:

方式1:补全两个泛型参数

如果暂时用any兜底,直接把<any>改成<any, any>:

ctx.setState(
  patch({
    table: patch({
      rows: iif<any, any>(
        (tasks: any) => tasks?.some((task: any) => task.id === updatedTask?.id),
        updateItem<any>((task: any) => task.id === updatedTask?.id, patch(updatedTask))
      ),
    }),
  })
);

如果知道rows的具体类型(比如是Task[]),建议替换成具体类型,类型检查更严谨:

// 假设你的任务类型是Task
ctx.setState(
  patch({
    table: patch({
      rows: iif<Task[], Task[]>(
        (tasks) => tasks?.some(task => task.id === updatedTask?.id),
        updateItem<Task>((task) => task.id === updatedTask?.id, patch(updatedTask))
      ),
    }),
  })
);

方式2:省略泛型参数,让TypeScript自动推断

TypeScript可以根据上下文自动推导iif的泛型类型,直接去掉<any>即可,代码更简洁:

ctx.setState(
  patch({
    table: patch({
      rows: iif(
        (tasks) => tasks?.some(task => task.id === updatedTask?.id),
        updateItem((task) => task.id === updatedTask?.id, patch(updatedTask))
      ),
    }),
  })
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 02:24:56