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

如何根据字符串值判断泛型Map是否存在对应key并解决类型报错

报错原因

  • 第一:你错误使用Object.entries()遍历Map实例。Object.entries()是用于普通JS对象的方法,传入Map实例时会把Map当做普通对象枚举其自身可枚举属性,得到的key固定为字符串类型,和你声明的泛型K的类型不匹配。
  • 第二:泛型K没有添加类型约束,TS无法确认K一定是string/number类型,无法兼容你后续的类型判断逻辑。

修复方案

  1. 给泛型K添加类型约束,限制为string | number,符合你的业务要求
  2. 直接遍历itemsMapper本身(Map实现了可迭代接口),不要用Object.entries包装,这样拿到的key类型就是泛型K的类型
  3. 调整key匹配distinctIdsList的逻辑,兼容number和string两种类型的K

修正后代码

export class SomeService
{
    // 给K添加类型约束
    getItemsPerKey<K extends string | number, V>(itemsMapper : Map<K,V[]>, distinctIdsList : number[]) 
    {
        let filteredItemsMapper : Map<K, V[]> = new Map();
        // 直接遍历Map,不要用Object.entries
        for (let [key, itemsTypeV] of itemsMapper)  
        {
            // 兼容number/string类型的key,转成数字后判断是否在目标列表中
            if (distinctIdsList.includes(Number(key)))
            {
                // 此时key的类型是K,不会再触发类型报错
                if (filteredItemsMapper.has(key))
                {
                    // 你的原有逻辑
                }
            }
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 19:39:01