在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 });
但是正确。
答案 0 :(得分:1)
您从_.find
获得的内容被输入Item|void
。使用_.find
的结果时,您应该处理所有情况:null
,undefined
或Item
。
您可以采取哪些措施来确保在其余代码中处理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
,则会抛出错误。您可能希望以不同的方式处理null
和undefined
结果,以避免在这种情况下停止您的计划。
强制将_.find
的结果转换为Item
可能不是您要实施的解决方案,因为null
或undefined
将被键入为Item
使用item
值时会抛出运行时错误。