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

Next.js+TypeScript项目报错:Property 'filter' does not exist on type 'ContextProps' 求助

Next.js+TypeScript项目报错:Property 'filter' does not exist on type 'ContextProps' 求助

嘿,兄弟,我看了你的代码,一下子就发现问题啦!你在EntryList.tsx里犯了个新手常踩的小坑——对对象调用了数组的filter方法,TypeScript当然会果断拦着你啦😉

问题根源

先回头看你在EntryContext.tsx里定义的ContextProps类型:

export type ContextProps = {
  entries: Entry[]
}

它是一个包含entries数组的对象,而不是直接的数组。当你用useEntries()获取上下文时,拿到的是这个完整的对象,不是里面的数组。你之前写的const entries = useEntries(),这里的entries其实是整个ContextProps对象,而不是数组,对象本身没有filter方法,TypeScript自然就报错了。

解决方案

超简单,把对象里的数组解构出来就行!修改EntryList.tsx里的代码:

export const EntryList = ({ status }: Props): JSX.Element => {
  // 解构出真正的entries数组
  const { entries } = useEntries()

  const renderEntries = entries
    .filter((entry: Entry) => entry.status === status)
    .map((entry: Entry) => (
      <EntryCard
        key={entry._id}
        entry={entry}
      />
    ))

  // ... 后面的return代码保持不变
}

这样entries就变成了Entry[]类型的数组,自然就能调用filter和map方法啦。

如果你暂时不习惯解构,也可以写成useEntries().entries.filter(...),不过解构的写法更清晰易懂,尤其你还在学TypeScript,推荐优先用解构~

给TypeScript新手的小提示

TypeScript在这里报错其实是在帮你提前避坑——如果没有类型检查,你直接对对象调用filter,到运行时才会崩掉,现在编译阶段就告诉你问题,这就是TypeScript的实用之处呀!以后遇到类似“某个方法不存在于某个类型”的错误,先确认下你操作的值是不是你以为的类型~

备注:内容来源于stack exchange,提问作者juan99

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 11:59:36