=== tests/cases/compiler/contextuallyTypingOrOperator.ts === var v: { a: (_: string) => number } = { a: s => s.length } || { a: s => 1 }; >v : { a: (_: string) => number; } >a : (_: string) => number >_ : string >{ a: s => s.length } || { a: s => 1 } : { a: (s: string) => number; } >{ a: s => s.length } : { a: (s: string) => number; } >a : (s: string) => number >s => s.length : (s: string) => number >s : string >s.length : number >s : string >length : number >{ a: s => 1 } : { a: (s: string) => number; } >a : (s: string) => number >s => 1 : (s: string) => number >s : string var v2 = (s: string) => s.length || function (s) { s.length }; >v2 : (s: string) => number | ((s: any) => void) >(s: string) => s.length || function (s) { s.length } : (s: string) => number | ((s: any) => void) >s : string >s.length || function (s) { s.length } : number | ((s: any) => void) >s.length : number >s : string >length : number >function (s) { s.length } : (s: any) => void >s : any >s.length : any >s : any >length : any var v3 = (s: string) => s.length || function (s: number) { return 1 }; >v3 : (s: string) => number | ((s: number) => number) >(s: string) => s.length || function (s: number) { return 1 } : (s: string) => number | ((s: number) => number) >s : string >s.length || function (s: number) { return 1 } : number | ((s: number) => number) >s.length : number >s : string >length : number >function (s: number) { return 1 } : (s: number) => number >s : number var v4 = (s: number) => 1 || function (s: string) { return s.length }; >v4 : (s: number) => number | ((s: string) => number) >(s: number) => 1 || function (s: string) { return s.length } : (s: number) => number | ((s: string) => number) >s : number >1 || function (s: string) { return s.length } : number | ((s: string) => number) >function (s: string) { return s.length } : (s: string) => number >s : string >s.length : number >s : string >length : number