gpt4 book ai didi

javascript - 流 : how to make Flow work with callback for Array. prototype.find()

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:57:11 24 4
gpt4 key购买 nike

伙计们,我是 Flow 的新手。

我有这个代码

type importItem = {
name: string,
groupRank: number,
rank: number,
node: Object,
};
function findTargetImportItem(importedItems: Array<importItem>, outOfOrderItem: importItem) : importItem {

return importedItems.find((importedItem: importItem) => importedItem.rank > outOfOrderItem.rank);}

我遇到了这个错误

Cannot return importedItems.find(...) because undefined [1] is incompatible with importItem [2].

src/rules/import-order.js
[2] 74│ function findTargetImportItem(importedItems: Array<importItem>, outOfOrderItem: importItem) : importItem {
75│ /**
76│ * Return the import where the unordered imports will be moving towards
77│ */
78│ return importedItems.find((importedItem: importItem) => importedItem.rank > outOfOrderItem.rank);
79│ }
80│
81│ function hasTrailingSpace(sourceCode, node) {

/private/tmp/flow/flowlib_21840530/core.js
[1] 244│ find(callbackfn: (value: T, index: number, array: Array<T>) => any, thisArg?: any): T | void;

我不知道如何让 Flow 知道 find 辅助函数返回的东西是 importItem 类型。

你们能帮帮我吗

最佳答案

流编译器是正确的。它知道 find() 返回的值 可以 undefined

如果数组中的任何项都不满足您传递的回调中的条件,则返回值将为 undefined。将 findTargetImportItem() 的返回类型更改为 void | importItem 或将 find() 的返回值赋给一个临时变量,如果临时变量是 undefined<,则返回 importItem 类型的一些默认值.

解决方案一

function findTargetImportItem(importedItems: Array<importItem>, outOfOrderItem: importItem) : void | importItem {
/**
* Return the import where the unordered imports will be moving towards
*/
return importedItems.find((importedItem: importItem) => importedItem.rank > outOfOrderItem.rank);
}

解决方案2

const defaultImportItem: importItem = ...;

function findTargetImportItem(importedItems: Array<importItem>, outOfOrderItem: importItem) : importItem {
/**
* Return the import where the unordered imports will be moving towards
*/
const importedItem = importedItems.find((importedItem: importItem) => importedItem.rank > outOfOrderItem.rank);

return importedItem === undefined
? defaultImportItem
: importedItem;
}

关于javascript - 流 : how to make Flow work with callback for Array. prototype.find(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53016492/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com