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

TS2339报错:类型“{}”上不存在属性“joiner”的TypeScript问题求助

错误原因

报错Property 'joiner' does not exist on type '{}'. TS2339的核心是TypeScript无法推断data状态的正确类型:
你初始化data时写的是useState({}),TypeScript会自动将data的类型推导为{}(空对象类型),空对象上不存在joiner属性,所以访问data.joiner时直接触发类型校验报错,该报错和Player组件的props是否设置为any无关。

解决方案

方案1:定义明确类型(最推荐)

先根据你的JSON结构定义对应的TypeScript接口,再给useState指定泛型,是符合TS规范的长期方案:

// 定义结构对应的类型
interface UserInfo {
  weakness: string;
  address: string;
  image: string;
}

interface ListingDataType {
  price: number;
  status: string;
  creator: UserInfo;
  joiner: UserInfo;
}

// 给useState指定泛型,初始值可设为null方便非空判断
const [data, setData] = useState<ListingDataType | null>(null);

// 渲染时增加非空判断即可
<Player 
  weakness={loading || !data ? '' : data.joiner.weakness}
  // 其他props不变
/>

方案2:临时指定any类型(适合快速调试)

如果暂时不需要严格类型校验,可以直接给data指定any类型跳过检查:

const [data, setData] = useState<any>({});

方案3:访问时做类型断言(适合临时修复)

不修改state定义的情况下,访问属性时断言为any+可选链规避报错:

weakness={loading ? '' : (data as any)?.joiner?.weakness || ''}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 01:27:04