Reactjs 如果可选属性是TypeScript中的数组,如何在三元运算符中使用布尔赋值

Reactjs 如果可选属性是TypeScript中的数组,如何在三元运算符中使用布尔赋值,reactjs,typescript,Reactjs,Typescript,我需要根据可选道具是否是数组来派生对象属性 我的任务是: const isRequestingMultipleDevices=Array.isArray(设备ID); 那么这个对象, { 数据:ISRequistingMultipleDevices ?deviceId.map((deviceId)=>getData(deviceId))//对象可能是“未定义的” :(DeviceID&[getData(DeviceID)])| |[],//对象可能是“未定义的” }; 它抱怨是因为devic

我需要根据可选道具是否是数组来派生对象属性

我的任务是:

const isRequestingMultipleDevices=Array.isArray(设备ID);
那么这个对象,

{
数据:ISRequistingMultipleDevices
?deviceId.map((deviceId)=>getData(deviceId))//对象可能是“未定义的”
:(DeviceID&[getData(DeviceID)])| |[],//对象可能是“未定义的”
};
它抱怨是因为
deviceid
是可选的。但是,这很好:

{
数据:Array.isArray(DeviceID)
?deviceId.map((deviceId)=>getData(deviceId))
:(DeviceID&[getData(DeviceID)])| |[],
};
我想使用
isRequestingMultipleDevices
,因为我需要在多个地方使用它


如何定义布尔值一次并在任何地方使用它?TIA

作为免责声明,我必须承认我未能引发与您报告的完全相同的错误,但我相信问题在于我们比类型检查器更了解情况。我的意思是:

在这次任务之后

const isRequestingMultipleDevices = Array.isArray(deviceIds);
我们知道:如果
isRequestingMultipleDevices
true
,则
deviceid
被定义为一个
数组。如果它是
false
,那么它可能是未定义的,并且肯定不是数组

稍后,当需要使用
isRequestingMultipleDevices

{
  data: isRequestingMultipleDevices
  ? deviceIds.map((deviceId) => getData(deviceId))
  : (deviceIds && [getData(deviceIds)]) || [],
};
尽管我们确信
deviceid
已定义,并且在三元表达式的第一个臂中有一个
数组
,但类型检查器显然无法以相同的方式缩小类型(这可能有几个原因)。因此,它拒绝您对
deviceid.map
的调用。拒绝
getData(deviceid)
的原因很复杂

在第二种情况下,当您“内联”数组检查时,类型检查器能够推断出
deviceid
在第一个arm中是
array
,在第二个arm中不是
array
,因此它接受整个表达式

解决此问题的一种方法是在两个呼叫站点上包括for
deviceid

// Assuming the device ID(s) are strings:
{
  data: isRequestingMultipleDevices
  ? (deviceIds as string[]).map((deviceId) => getData(deviceId))
  : (deviceIds && [getData(deviceIds as string)]) || [],
};

你能告诉我们错误吗?我已经创建了一个代码片段,但想不起@GrégoryNEUT sure:
(参数)deviceId:string | string[]|未定义的对象可能是“未定义的”。ts(2532)
非常感谢您提供的详细答案-理解-它正在工作!