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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 06:54:05