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

React Context使用时遇TS2339错误:company_token不存在于Company[]类型

解决TS2339错误:company_token不存在于类型Company[]

问题根源

你在Context里把company的类型声明成了Company[](数组),但实际doGetToken返回的是单个Company对象(结构{company_token:"43fwef4"})。数组类型没有company_token属性,所以TypeScript报错。

分步修正

1. 修正Context的类型定义

打开company-context.tsx,修改CompanyContextData接口:

export interface CompanyContextData {
    company: Company | undefined; // 从数组改为单个对象或undefined
    loadCompany: (company: Company) => void; // 参数从空数组改为Company类型
}

2. 更新Context默认值

把默认值里的空数组换成undefined:

const CompanyContextDefaultValue: CompanyContextData = {
    company: undefined,
    loadCompany: () => null,
};

3. 修正loadCompany回调的参数类型

在useCompanyContextValue里,把loadCompany的参数类型从[]改成Company:

const loadCompany = React.useCallback((company: Company) => dispatch(actions.loadCompany(company)), []);

同时要确保你的CompanyReducer和actions.loadCompany也支持接收单个Company对象,比如defaultState里的company要初始化为undefined而非空数组。

4. 调整Home组件的逻辑

因为company现在可能是undefined,调用doGetArticles前必须先判断它是否存在,同时修正useEffect的依赖数组:

useEffect(() => {
    const load = async () => {
        // 先获取token并更新Context
        await call(
            () => doGetToken('https://quadrifoglio.expressleather.app'),
            (response) => {
                if (response) loadCompany(response);
            }
        );

        // 确保company存在后再调用第二个API
        if (company) {
            await call(
                () => doGetArticles(company.company_token),
                (response) => {
                    if (response.articles) loadArticles(response.articles);
                    if (response.categories) loadCategories(response.categories);
                }
            );
        }
    };

    load();
}, [loadCompany, company]); // 添加依赖避免闭包问题

额外注意

  • 检查../types里的Company类型定义,确保它包含company_token属性:
export type Company = {
    company_token: string;
};
  • 如果doGetToken可能返回null/undefined,要在回调里做更严谨的判断,避免把无效值传给loadCompany。

内容的提问来源于stack exchange,提问作者mrk-nrd-dev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 13:02:34