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

React TypeScript中createContext默认值类型不匹配问题求助

解决React Context中TypeScript类型不匹配问题

你的TS报错核心原因是:UpdatePetTypeContext的默认函数返回React.MouseEvent类型,但实际传入Provider的togglePet函数返回void,两者类型不匹配。以下是修正方案:

步骤1:明确更新函数的类型定义

先定义更新函数的类型签名,确保后续Context和实际函数都遵循这个类型:

type UpdatePetTypeFn = (event: React.MouseEvent<HTMLElement>) => void;

步骤2:创建符合类型的Context

用上面定义的类型创建Context,设置一个符合类型的默认值(空函数,避免未被Provider包裹时调用报错):

const UpdatePetTypeContext = createContext<UpdatePetTypeFn>(() => {});

完整修正后的代码

// PetTypeProvider.tsx
import { useState, createContext, useContext } from 'react';

// 宠物类型Context,默认值与初始状态保持一致更合理
const PetTypeContext = createContext('Dogs');

// 定义更新函数的类型
type UpdatePetTypeFn = (event: React.MouseEvent<HTMLElement>) => void;

// 创建更新函数Context,默认值为符合类型的空函数
const UpdatePetTypeContext = createContext<UpdatePetTypeFn>(() => {});

export function usePetType() {
  return useContext(PetTypeContext)
}

export function useUpdatePetType() {
  return useContext(UpdatePetTypeContext)
}

interface PetTypeProviderProps {
  children: JSX.Element|JSX.Element[];
}

export const PetTypeProvider: React.FC<PetTypeProviderProps> = ({children}) => {
  const [petType, setPetType] = useState('Dogs');
  const togglePet = (event: React.MouseEvent<HTMLElement>) => setPetType(event.currentTarget.innerText);
  return (
    <PetTypeContext.Provider value={petType}>
      <UpdatePetTypeContext.Provider value={togglePet}>
        {children}
      </UpdatePetTypeContext.Provider>
    </PetTypeContext.Provider>
  );
};

这样修改后,TS编译器会认可类型匹配,同时默认的空函数也能避免组件未被PetTypeProvider包裹时,调用useUpdatePetType()返回undefined导致的潜在报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 14:41:31