lodash find() 的流式注解

flow-type annotations for lodash find()

在 javascript 函数中,我使用 lodash _.find() 来 select 数组中的一个项目。我已经从 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);
...

我没有收到任何错误但是,我不知道我是否正确地完成了此操作,或者我是否只是将类型安全短路了首先将其转换为 'any' 并没有给自己带来任何好处。有没有 "more proper" 方式 annotating/using Lodash 方法和 flow-type 结合在一起?

此外,如果我做对了,是否有一种语法可用于在一行中进行转换,类似于:

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

但正确。

您从 _.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
...

如果在 items 数组中找不到 id,这将引发错误。您可能希望以不同的方式处理 nullundefined 结果,以避免在这种情况下停止您的程序。

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