首页 > 解决方案 > 在 Typescript 接收函数中使用 Array.from 未定义错误

问题描述

我尝试在我的 Typescript 应用程序中使用一些 ES6 语法,并希望在映射可观察对象数组时将 for-of 循​​环更改为 Array.from,但我收到 undefine is not a function 错误。

   Array.from(item.modules, ([value]) =>
       selectedImage.setModules(
        moudleWithThumbnail(value.name, value.version).name,
        moudleWithThumbnail(value.name, value.version).version,
        moudleWithThumbnail(value.name, value.version).thumbnail
    ));

但如果我用另一种方式写,它工作正常

 const arr = Array.from(item.modules);
    arr.map((item: any) =>
      selectedImage.setModules(
        moudleWithThumbnail(item.name, item.version).name,
        moudleWithThumbnail(item.name, item.version).version,
        moudleWithThumbnail(item.name, item.version).thumbnail
      )
    );

我不知道他们之间有什么区别。

标签: javascriptarraysreactjstypescript

解决方案


使用([value]) =>,您将参数(项目)的第一个可迭代属性解构为value变量名称。但是你item是一个对象,而不是一个可迭代的(如数组) - 所以像数组解构语法一样[value]不起作用。

如果您想解构,请改用对象解构,提取nameversion

Array.from(item.modules, ({ name, version }) =>
  selectedImage.setModules(
    moudleWithThumbnail(name, version).name,

或者不要解构:

Array.from(item.modules, (item) =>
  selectedImage.setModules(
    moudleWithThumbnail(item.name, item.version).name,

或者,减少代码重复性的更好策略是moudleWithThumbnail只调用一次(如果可行的话):

 Array.from(item.modules, (item) => {
   const { name, version, thumbnail } = moudleWithThumbnail(item.name, itemversion);
   return selectedImage.setModules(name, version, thumbnail);
 });

推荐阅读