【问题标题】:Typescript Argument of type never[] is not assignable to parameter of type SetStateAction<never[]>never[] 类型的 Typescript 参数不可分配给 SetStateAction<never[]> 类型的参数
【发布时间】:2021-06-08 18:59:14
【问题描述】:

我有一个汇编表单步骤的打字稿代码,它在构建时给我一个错误,这是函数,它给我一个错误就行了:

setVisitedForms((seenForms) => [...seenForms, currentIndex].sort((x, y) => x - y));

  const push = useCallback(
    (form = nextForm) => {
      if(!!currentForm) {
        const currentIndex = forms.indexOf(currentForm);
        if (currentIndex >= 0) {
          setVisitedForms((seenForms) => [...seenForms, currentIndex].sort((x, y) => x - y));
        }
        history.push(`${baseurl}${form}`);
      }
    },
    [baseurl, history, nextForm, currentForm, forms, setVisitedForms]
  );

这是控制台上出现的错误。有谁知道我做错了什么?

Argument of type '(seenForms: never[]) => number[]' is not assignable to parameter of type 'SetStateAction<never[]>'.

【问题讨论】:

    标签: javascript typescript


    【解决方案1】:

    听起来您不打算将visitedForms 的类型设为never[],但您写道:

    const [visitedForms, setVisitedForms] = useState([])
    

    从默认值 [] 推断出类型 never[]

    改为使用预期类型注释useState

    const [visitedForms, setVisitedForms] = useState<number[]>([])
    

    【讨论】:

    • 最佳答案!消除挫败感的最简单方法是使用useState&lt;any[]&gt;([]) 启动一个数组
    【解决方案2】:

    这是SetStateAction的定义。

    type SetStateAction<S> = S | ((prevState: S) => S);
    

    这意味着 setVisitedForms 的参数必须是 S 类型,或者它必须是接受 S 类型并返回 S 类型的函数。

    S 是通用的。您可以在 typescript 文档中了解它们。

    Typescript 认为 seenForms 是一个空数组:never[],currentIndex 是一个数字。 setVisitedForms 回调必须返回与其接收相同的类型,在您的情况下为never[],但由于 currentIndex 是一个数字,它返回number[]。您需要修复 setVisitedForms 以便传入回调的任何内容都是 number[] 类型。

    【讨论】:

      【解决方案3】:

      您应该为seenForms 参数添加一个类型。在这种情况下number[]

      setVisitedForms((seenForms: number[]) => [...seenForms, currentIndex].sort((x, y) => x - y));
      

      【讨论】:

      • 谢谢!但不幸的是,这带来了另一个错误 - '(seenForms: number[]) => number[]' 类型的参数不可分配给 'SetStateAction' 类型的参数。
      猜你喜欢
      • 2021-08-01
      • 2021-10-03
      • 1970-01-01
      • 1970-01-01
      • 2021-10-26
      • 2021-03-01
      • 2018-11-03
      • 2021-06-09
      • 1970-01-01
      相关资源
      最近更新 更多