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

TypeScript报错Tag无法索引{}类型,getTagsByPost函数如何修复?

错误原因

你定义的allTags类型为Record<Tag, {title: string, slug: string}[]> | {},TS 无法识别{}类型可以被Tag类型的键索引,因此抛出索引非法的报错。同时你实际返回的聚合结果也不会包含所有Tag枚举值作为键,和你声明的完整Record类型也不匹配。

修复方案

将allTags的类型修改为Partial<Record<Tag, {title: string, slug: string}[]>>即可,Partial工具类型会将Record的所有键转为可选状态,既符合初始值{}的类型要求,也允许你用Tag类型的值作为键访问属性。

另外你代码里的const formattedTag = tag as Tag属于冗余断言,因为Meta的tags属性本身就是Tag[]类型,遍历拿到的tag天然就是Tag类型,不需要额外转换。

修复后的完整代码如下:

const getTagsByPost = (posts: Pick<Meta, 'title' | 'slug' | 'tags'>[]) => {
    let allTags: Partial<Record<Tag, {title: string, slug: string}[]>> = {}
    for (let { title, slug, tags } of posts) {
        for (let tag of tags) {
            const temp = { title, slug }
            if (tag in allTags) {
                allTags[tag].push(temp)
            } else {
                allTags[tag] = [temp]
            }
        }
    }
    return allTags
}

后续访问返回结果里的某个标签对应的文章列表时,TS 会提示该值可能为undefined,如果能确定该标签一定存在,可以用非空断言allTags['mobx']!,或者提前做判空处理即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 00:06:02