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

封装useState钩子遇TS2322错误:Dispatch类型不兼容如何解决?

修复useState包装钩子的TypeScript类型错误

你的错误根源在于TypeScript自动将useState(undefined)的状态类型推断为undefined,而非你期望的CdvPurchase.VerifiedPurchase | undefined,导致setSubscription的类型和你声明的返回类型不兼容。

修复方案1:显式指定useState泛型类型

直接给useState指定泛型,明确状态的可选类型:

const useStateIAPSubscription = (): [
  CdvPurchase.VerifiedPurchase | undefined,
  React.Dispatch<React.SetStateAction<CdvPurchase.VerifiedPurchase | undefined>>,
] => {
  const [subscription, setSubscription] = useState<CdvPurchase.VerifiedPurchase | undefined>(undefined);
  return [subscription, setSubscription];
};

export default useStateIAPSubscription;

修复方案2:简化返回类型(推荐)

去掉手动声明的返回类型,让TypeScript根据泛型自动推断,同时用as const锁定返回数组的类型:

const useStateIAPSubscription = () => {
  const [subscription, setSubscription] = useState<CdvPurchase.VerifiedPurchase | undefined>(undefined);
  return [subscription, setSubscription] as const;
};

export default useStateIAPSubscription;

两种方案都能让setSubscription正确接受undefined或CdvPurchase.VerifiedPurchase类型的值,也支持传入接收当前状态并返回这两种类型的函数,完全满足你在订阅就绪前初始化、后续更新数据的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 05:22:03