TypeScript 似乎在推断类型保护的联合类型方面存在问题。例如,考虑一个将类型保护数组与以下签名组合的函数
function combine<T>(guards: ((x: any) => x is T)[]): (x: any) => x is T
Run Code Online (Sandbox Code Playgroud)
并考虑以下类型护板带A和B具有不同特性的
function isA(x: any): x is A
function isB(x: any): x is B
Run Code Online (Sandbox Code Playgroud)
现在我希望combine([isA, isB])能够工作并拥有推断的类型,(x: any) => x is A | B但我收到一个错误,指出类型的参数((x: any) => x is A | (x: any) => x is B)[]不可分配给类型的参数(x: any) => x is A,这意味着T推断为A而不是A | B.
当T明确指定时,即combine<A|B>([isA, isB]) …
typescript ×1