代码之家  ›  专栏  ›  技术社区  ›  Patrick Kenny

ts2322类型“Dispatch<SetStateAction<undefined>”不可分配给类型“Disptch<SetState Action<MyType | undefined>>”

  •  0
  • Patrick Kenny  · 技术社区  · 1 年前

    我在为写包装纸时遇到问题 useState() 因为我犯了一个我不明白的错误:

    键入“Dispatch<设置状态操作>'不可分配给类型 '调度<SetStateAction<已验证购买|未定义>>'。

    类型'SetStateAction<已验证采购|未定义>'不可分配给 类型“SetStateAction”。

    类型“VerifiedPurchase”不可分配给类型“SetStateAction”。

    类型“VerifiedPurchase”不提供签名“(prevState:undefined):undefine”的匹配项。

    这是我的代码:

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

    我想做的是创建一个 useState() 默认值为的钩子 undefined 。我希望setState()函数只接受 未定义的 或特定类型( CdvPurchase.VerifiedPurchase )。

    我尝试这样做是因为应用程序在订阅准备好之前就已经初始化了,我想稍后用 useState()

    如何修复此TypeScript错误?

    1 回复  |  直到 1 年前
        1
  •  1
  •   Nicholas Tower    1 年前
    const [subscription, setSubscription] = useState(undefined);
    

    由于您还没有指定此状态将包含什么类型的数据,typescript会尽力推断它 undefined 因此它假设状态是(并且永远是) 未定义的

    由于您希望它能够更改为未定义的值,因此需要提供一个显式类型,如:

    const [subscription, setSubscription] = useState<CdvPurchase.VerifiedPurchase | undefined>(undefined);