流数组类型在该类型的子集上失败

时间:2018-07-13 21:05:22

标签: flowtype

我有一个可在许多不同地方使用的函数,因此它具有非常广泛的类型:

export const stringToArrayFn = ( accessor?: | Function | string | boolean | Object | Array<Function | string | boolean | Object>, defaultAccessor?: Function, raw?: boolean )

当我打电话时:

stringToArrayFn(yAccessor)

将yAccessor键入为:

yAccessor?: Array<Function | string> | Function | string

流抱怨Cannot call stringToArrayFn with yAccessor bound to accessor because boolean [1] is incompatible with string [2] in array element.

我不明白,因为yAccessor中的Array是stringToArrayFn中定义的数组可能性的有效子集(前者仅允许函数或字符串的数组,后者允许函数,字符串,布尔和对象的数组)。

一个人如何处理这种打字?

1 个答案:

答案 0 :(得分:4)

const requestPromisified = promisify(request) 可能会调用stringToArrayFn并导致您的accessor.push(true)包含Array<Function | string>,这很糟糕。

如果boolean的定义不是要突变提供的数组,请使用$ReadOnlyArray代替Array的定义。