lodash find()的流式注释

时间:2017-06-26 18:30:11

标签: javascript lodash flowtype flow-typed

在javascript函数中,我使用lodash _.find()从数组中选择一个项目。我已经从flow-typed安装了lodash定义,它正在工作且可用。

我弄清楚如何将_.find()方法与注释一起使用的唯一方法是在不向我执行查找的const中添加类型之后对其进行类型转换:

import { find } from 'lodash';

...

const items: Array<Item> = user.items;
const item = find(items, {"id", selectedId});

let finalItem: Item = ((item: any): Item);
...

我没有收到任何错误但是,我无法判断我是否已正确完成此操作,或者我是否只是将其短路了通过将其投射到“任何”的类型来确保安全性。首先,我一无所获。是否有更合适的&#34;一起注释/使用Lodash方法和流类型的方法?

另外,如果我正确地进行了操作,是否有可用于在一行上进行转换的语法,类似于以下内容:

const item: ((item: any): Item) = find(items, {"id": selectedId });

但是正确。

1 个答案:

答案 0 :(得分:1)

您从_.find获得的内容被输入Item|void。使用_.find的结果时,您应该处理所有情况:nullundefinedItem

您可以采取哪些措施来确保在其余代码中处理Item类型的某些内容,但在任何其他情况下都会失败。

const items: Array<Item> = user.items;
const item = find(items, {"id", selectedId});
if (item === null || item === undefined) {
  throw new Error(`Could not find item with id ${selectedId} in items`}
}

// In lines below item is type of Item
...

如果在id数组中找不到items,则会抛出错误。您可能希望以不同的方式处理nullundefined结果,以避免在这种情况下停止您的计划。

强制将_.find的结果转换为Item可能不是您要实施的解决方案,因为nullundefined将被键入为Item使用item值时会抛出运行时错误。