Reactjs React-TypeScript条件呈现在prop函数中保留类型保护

Reactjs React-TypeScript条件呈现在prop函数中保留类型保护,reactjs,typescript,Reactjs,Typescript,我有条件地呈现一个按钮。但是,在第7行,exportExcel函数的第一个参数是同一个变量,该变量必须为非Nil,按钮才能均匀渲染,但TS在第7行表示,“数据”可能为空。我觉得TS应该知道它不是基于条件呈现的Nil,但我也知道内联函数是一个新的作用域 我找到的唯一解决方案是可选链接和作为任何[]。(exportExcel的第一个参数是任意[]) 如何使TS错误正确消失 onClick={()=>exportExcel(数据?.productsByType?.products作为任何[],“程序数

我有条件地呈现一个按钮。但是,在第7行,exportExcel函数的第一个参数是同一个变量,该变量必须为非Nil,按钮才能均匀渲染,但TS在第7行表示,
“数据”可能为空。我觉得TS应该知道它不是基于条件呈现的Nil,但我也知道内联函数是一个新的作用域

我找到的唯一解决方案是可选链接和
作为任何[]
。(exportExcel的第一个参数是任意[])

如何使TS错误正确消失

onClick={()=>exportExcel(数据?.productsByType?.products作为任何[],“程序数据”)}

1。{data.productsByType.products&&(
2.导出Excel(data.productsByType.products,“程序数据”)}
8.                 >
9.下载CSV
10
11.               )}

当您进行调用时,这是在回调内部发生的。此回调将在将来的某个时候调用,TypeScript不能假设在声明回调和用户单击按钮时调用回调之间,
data.productsByType
对象没有更改

如果希望避免这种情况,可以将该值保存为常量,然后在JSX代码中使用它

const products=data.productsByType.products;
{products&&(
exportExcel(产品,“程序数据”)}
>下载CSV
)}

这里没有问题。你能不能更新一下,弄清楚你在问什么?
1.                {data.productsByType.products && (
2.                  <Button
3.                   color="primary"
4.                   variant="contained"
5.                   className="actionButton"
6.                   style={{ marginBottom: 15 }}
7.                   onClick={() => exportExcel(data.productsByType.products, "program-data")}
8.                 >
9.                   Download CSV
10.                 </Button>
11.               )}