Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 在阵列上使用.concat时道具显示身份不明_Reactjs_Typescript - Fatal编程技术网

Reactjs 在阵列上使用.concat时道具显示身份不明

Reactjs 在阵列上使用.concat时道具显示身份不明,reactjs,typescript,Reactjs,Typescript,因此,我的道具中的项目数组在日志记录时包含项目,但在使用.concat尝试添加到数组时,它表示无法读取未定义的属性“concat” export default (props) => { const { items } = props; const samples = samplesAsOrderItems(); const allBasketItems = items.concat(samples); return ( <div className="Or

因此,我的道具中的项目数组在日志记录时包含项目,但在使用
.concat
尝试添加到数组时,它表示
无法读取未定义的属性“concat”

export default (props) => {
  const { items } = props;
  const samples = samplesAsOrderItems();
  const allBasketItems = items.concat(samples);

  return (
    <div className="OrderDetails">
      <h4 className="OrderDetails__title">Order summary</h4>

      <div className="OrderDetails__content">
        <div className="OrderDetails__items">
          {items && items.map( (orderItem, index) => {
            return (
              <OrderItem
                key={index}
                {...orderItem}
                displayType={DisplayType.MINIMAL}
              />
            );
          })}
        </div>

        <TotalBreakdown
          {...getTotalBreakdownFromOrder(props)}
        />

      </div>
    </div>
  );

  function samplesAsOrderItems() {
    const sampleItems = get(props, 'samples[0]', undefined);
    var orderItems: Mothership.IOrderItem[] = [];

    if (sampleItems === undefined) {
      return orderItems;
    } else {
      sampleItems.product.bundleItems.map( (bundleItem, index) => (
        bundleItem.siblings.map( (sibling) => (
          orderItems.push(bundleToOrderItem(sibling, sampleItems.subTotal.currencyCode))
        ))
      ));
      return orderItems;
    }
  }
};
导出默认值(道具)=>{
常量{items}=props;
const samples=samplesAsOrderItems();
const allBasketItems=items.concat(样本);
返回(
订单摘要
{items&&items.map((orderItem,index)=>{
返回(
);
})}
);
函数samplesAsOrderItems(){
const sampleItems=get(props,“samples[0]”,未定义);
var orderItems:Mothership.IOrderItem[]=[];
如果(sampleItems===未定义){
退货订单项目;
}否则{
sampleItems.product.bundleItems.map((bundleItem,index)=>(
bundleItem.sibles.map((同级)=>(
push(bundleToOrderItem(同级,sampleItems.subTotal.currencyCode))
))
));
退货订单项目;
}
}
};

我对typescript和react相当陌生,我真的很难理解为什么会发生这种情况。

在这里,您使用的组件没有通过items中的数组。这是items.concat因该错误而失败的唯一方法,因为道具是不可变的

使用此组件时,请确保像调用


在Typescript中,事物的类型对代码在运行时的执行方式不起作用,因此“any”在更改代码执行方式方面不起作用。

什么类型是
props
?目前它是
any
,所以您得到的是:没有静态类型检查,任何垃圾都可以传递there@zerkms我只是刚刚加入了这个代码库,但是传递的道具很大,而项目只是其中的一小部分,所以现在它是
any
,然后开始逐步输入它。首先确保
items
是一个
string[]
。“因此“any”在更改代码执行方式方面不起作用。”---wat。如果键入了
props
,则不会在
undefined
上调用
.concat
方法,它只是不会通过类型检查。选择TS,然后故意使用
any
,这确实有点道理。“使用此组件时确保”-这是使用ts背后的全部想法,您不需要再“确保”,编译器会为您确保。所有类型(包括“any”)在代码执行方式中都不起作用,是否键入props无关紧要。编译器会确保您的代码类型正确,并且您在TSConfigyYou中进行了strictNullChecks检查,但您没有遵循:如果代码类型正确,则问题永远不会发生。不管TS在运行时不存在,正确使用它不会让问题从一开始就发生。看到区别了吗:你建议“确保”这是人为因素问题,我建议键入它-以便自动检查。哦,我明白你现在说的了,我还以为你是“O.P”所以我是从“O.P”的角度来读的。是的,如果您正确地键入“props”,编译器将确保您。