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

使用useFetch获取Map<string, number>失败,返回Object问题求助

如何通过Nuxt的useFetch获取并转换为Map<string, number>类型?

为什么返回的是Object而非Map?

  • JSON规范里不存在Map数据类型,你的API返回的是标准JSON对象,JS会自动将JSON解析为普通键值对对象,这是运行时的实际数据结构。
  • TypeScript的泛型<Map<string, number>>仅作为类型提示,不会修改实际数据——它只是告诉TS编译器你期望变量是Map类型,但实际拿到的仍是解析后的普通对象,所以调用get()方法会触发“不是函数”的错误。

解决方案

方法1:手动转换数据

先获取原始对象,再用Object.entries()将其转为Map所需的键值对数组,最后生成Map:

<script setup lang="ts">
// 标注原始数据为Record<string, number>,更贴合实际类型
const { data: rawObj } = await useFetch<Record<string, number>>('http://localhost:8080/map-test');

// 转换为Map
const myMap = ref<Map<string, number> | null>(null);
if (rawObj.value) {
  myMap.value = new Map(Object.entries(rawObj.value));
}

// 现在可正常调用Map方法
console.log(myMap.value?.get("test")); // 输出 1
</script>

方法2:用useFetch的transform钩子直接转换

利用useFetch的transform选项,在数据解析完成后立刻转为Map,返回的data直接就是Map类型:

<script setup lang="ts">
const { data: myMap } = await useFetch<Map<string, number>>('http://localhost:8080/map-test', {
  transform: (responseData) => new Map(Object.entries(responseData))
});

// 直接使用Map方法
console.log(myMap.value?.get("test")); // 输出 1
</script>

补充说明

Object.entries()会把普通对象的键值对转换为[key, value]格式的数组,而Map的构造函数恰好接受这种数组作为参数,这是实现转换的核心逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 19:02:44