TypeScript报错参数'__0'与'value'类型不兼容问题求解
问题解决
错误根源
你声明listeners时没有给Set指定泛型参数,TypeScript会默认将Set存储的元素类型推断为unknown,unknown类型不允许直接解构、访问属性,也无法直接赋值给你自定义的对象结构,因此触发类型不兼容报错。
解决方案
方案1:显式声明类型(推荐,符合TypeScript规范)
首先定义Set内存储的元素类型,再给Set指定泛型:
import { useState } from 'react'; // 定义Listener结构类型 type Listener = { keys?: any; // 自动匹配useState返回的更新函数类型,避免手动写any fire: ReturnType<typeof useState>[1]; } // 声明Set时指定泛型 const listeners = new Set<Listener>();
修改后你的forEach代码不需要额外加类型标注,TypeScript会自动推断元素类型:
listeners.forEach(({ keys, fire }) => { // 业务代码 });
同时建议给create函数的keys参数补充类型标注,避免隐式any报错。
方案2:临时类型断言(仅适合临时调试场景)
如果你不想修改原有Set的定义,可以在遍历元素时做类型断言绕过检查:
listeners.forEach((item) => { const { keys, fire } = item as { keys?: any; fire: any }; // 业务代码 });
内容的提问来源于stack exchange,提问作者user3331344
相关产品推荐
相关产品推荐

