类型 'never[]' 不能分配给类型 'never'。 TS2322 使用 createContext Hook 传递给 ContextProvider 的值

时间:2021-05-19 08:18:13

标签: reactjs typescript react-hooks react-state-management createcontext

我无法将 state 和 setState 分配给 ContextProvider 的 value 参数

代码:-

import React, { useState, createContext } from 'react';
import { makeStyles } from '@material-ui/core';
import ProductHeader from './components/productHeader';
import ProductTable from './components/productTable';

const styles = makeStyles((theme) => ({
    root: {
        height: '92.7%',
        position: 'fixed',
        width: '85%',
        bottom: '0',
        right: '0',
        border: `1px solid  ${theme.palette.success.light} `,
        overflow: 'hidden',
    },
}));
// use State + use Context

const ProductContext = createContext([]);

const ProductPortion: React.FC = () => {
    const classes = styles();
    const [products, setProducts] = React.useState([]);
    return (
        <div className={classes.root}>
            <ProductContext.Provider value={[setProducts, products]}>
                <ProductHeader />
                <ProductTable />
            </ProductContext.Provider>
        </div>
    );
};

export default ProductPortion;

确切的错误:-

TypeScript error in C:/Users/dell/Desktop/Web current Projects/bigosoft/bigosoft/POS-Retail-Frontend/Retail-POS-Frontend/src/components/Management/components/productPortion/index.tsx(26,46):
Type 'Dispatch<SetStateAction<never[]>>' is not assignable to type 'never'.  TS2322

    24 |     return (
    25 |         <div className={classes.root}>
  > 26 |             <ProductContext.Provider value={[setProducts, products]}>
       |                                              ^
    27 |                 <ProductHeader />
    28 |                 <ProductTable />
    29 |             </ProductContext.Provider>

我想使用 ContextProvider 将状态及其设置器传递给孩子,但出现 TypeScript 错误。

1 个答案:

答案 0 :(得分:0)

我认为问题出在

const ProductContext = createContext([])

见下一个例子:

const foo=<T,>(arg:T)=>arg
foo([]) // never[]

但是如果您提供了明确的 type ,它将按您的预期解决:

foo<number[]>([]) // number[]

在你的情况下,我相信你应该这样写:

const ProductContext = createContext<Products[]>([])

我假设你知道你的 Products 类型

相关问题