gpt4 book ai didi

javascript - Flow 提示减少返回单个 bool 值

转载 作者:行者123 更新时间:2023-11-28 15:06:17 24 4
gpt4 key购买 nike

我不确定我在这里做错了什么:

export function subscriptionsReady(handles: Array<Object>): boolean {
if (handles.length === 1) return handles[0].ready();

return handles.reduce((a: any, b: Object): boolean => {
return (typeof a === 'object' ? a.ready() : a) && b.ready();
});
}

流程错误:

  9:   return handles.reduce((a: any, b: Object): boolean => {
^ call of method `reduce`
9: return handles.reduce((a: any, b: Object): boolean => {
^ undefined (too few arguments, expected default/rest parameters). This type is incompatible with the expected return type of
6: export function subscriptionsReady(handles: Array<Object>): boolean {
^^^^^^^ boolean

最佳答案

这是因为type definition for Array.prototype.reduce 期望“memo”或返回的 bool 值与 .reduce() 的第二个参数相匹配。

但是,您实际上是在尝试检查句柄中的每个对象是否都是 .ready() 在这种情况下,这可能对您更好:

function subscriptionsReady(handles: Array<Object>): boolean {
return handles.every((handle): boolean => {
return handle.ready();
});
}

因为 Array.prototype.every 已经是良好的类型,所以您实际上可以省略大多数类型:

function subscriptionsReady(handles: Array<Object>) {
return handles.every(handle => handle.ready());
}

Flow 将能够推断一切。

此外,您可能希望为句柄添加基本类型,而不是像这样的object:

type Handle = { ready(): boolean };

function subscriptionsReady(handles: Array<Handle>) {
return handles.every(handle => handle.ready());
}

这将改善当您误用 API 时 Flow 生成的错误。

一般来说,您应该尝试定义这些类型,而不是使用Object

关于javascript - Flow 提示减少返回单个 bool 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38778718/

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