我有一个可在许多不同地方使用的函数,因此它具有非常广泛的类型:
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中定义的数组可能性的有效子集(前者仅允许函数或字符串的数组,后者允许函数,字符串,布尔和对象的数组)。
一个人如何处理这种打字?
答案 0 :(得分:4)
const requestPromisified = promisify(request)
可能会调用stringToArrayFn
并导致您的accessor.push(true)
包含Array<Function | string>
,这很糟糕。
如果boolean
的定义不是要突变提供的数组,请使用$ReadOnlyArray
代替Array
的定义。