打字稿错误“无法将类型参数分配给类型参数”

迈克·K:

我是TS新手,现在遇到了一个奇怪的问题。我似乎已经定义了所有内容,但似乎无法识别我输入的数据。

这是我所拥有的:

const Component = () => {
    const [data, setData] = React.useState([[], []])

    React.useEffect(() => {
        fetchData()
    }, [])

    const fetchData = React.useCallback(async () => {
        const data = await fetchDataController()

        setData(data)
                ^^^^ error
    })
}

这会引发错误,

Argument of type 'Element[][]' is not assignable to parameter of type 'SetStateAction<never[][]>'
  Type 'Element[][]' is not assignable to type 'never[][]'
    Type 'Element[]' is not assignable to type 'never[]'
      Type 'Element is not assignable to type 'never'

我的函数fetchDataController返回一个元素数组的数组。

我的类型如下:

type TData = {
  id: string,
  desc: string
}

我尝试做类似的事情,

const [data, setData] = React.useState<Array<TData[], TData[]>>([[], []])

但这似乎不起作用。我在这里想念什么?

坦美:

你近了 Array<...>需要一个参数,即数组中项目的类型。所以你可以做类似的事情Array<TData[]>如果你不想使用Array<...>,你可以这样做TData[][],以及

所以,

React.useState<TData[][]>([[], []])

这是一个带有一些模拟工作代码箱


如果您想更加具体,请将其定义为Tuple,而不是通常的数组:

React.useState<[TData[], TData[]]>([[], []])

但是要使其正常工作,您必须向Typescript保证您要设置的内容(即datain setData(data)也是type)[TData[], TData[]]

你可以用类似的方法做到这一点 setData(data as [TData[], TData[]])

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

React Component上的打字稿错误:无法将'Element'类型的参数分配给该类型的参数

打字稿错误:无法将类型'number'的参数分配给'Expected <Promise <number >>'类型的参数

打字稿错误:“对象”类型的参数无法分配给“ {} []”类型的参数

打字稿中的“无法分配给永不类型的参数”错误是什么?

减少数组功能的打字稿错误-无法将“字符串”分配给类型的参数

Firebase:getIdToken()的结果导致错误:无法将类型'Promise'的参数分配给类型'string'的参数

React useState hooks错误:无法将类型“ xxx”的参数分配给类型“ SetStateAction <xx>”的参数

使用Jest无法将类型“ openURL”的参数分配给类型“从不”的参数

无法将类型“未知”的参数分配给类型“字符串”的参数

无法将类型'MemoizedSelector <ICommonAppState,IMenuItemsObject []>'的参数分配给类型'string'的参数

修复TS2345:无法将类型“ HTMLElement”的参数分配给类型“ HTMLInputElement”的参数

无法将类型“ ApolloServer”的参数分配给类型“ ApolloServerBase”的参数

无法将类型“未知”的参数分配给类型“ {}”的参数

打字稿:无法分配给类型错误

打字稿错误:无法将“数字”类型分配给“从不”类型

无法将类型为'HttpEvent <any>'的角形参数分配给该参数

打字稿中的类型问题:类型参数不可分配给类型参数

打字稿:“不可分配给从不类型的参数”错误

无法将参数类型“ ”分配给参数类型列表 <>

打字稿错误TS2345错误:TS2345:“缓冲区”类型的参数无法分配给“字符串”类型的参数

打字稿键盘事件:“事件”类型的参数不能分配给“键盘事件”类型的参数

类型“ any”的参数不能分配给“从不”类型的参数打字稿解决方案

D3,打字稿-类型'this'的参数不能分配给类型'BaseType'的参数

打字稿-类型“ X”的参数不能分配给类型“ Y”的参数

无法将字符串类型的参数分配给paramMap

无法将函数分配给具有通用参数的类型

错误:无法将参数类型“ void Function(ImageInfo,bool)”分配给参数类型“ ImageStreamListener”

错误:无法将参数类型“String”分配给参数类型“Uri”。'Uri' 来自 'dart:core'

错误:无法将参数类型“上下文”分配给参数类型“ BuildContext”