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
相关产品推荐
相关产品推荐

