const a = false || [] // ^? const b = [] // ^? function c() { // ^? return [] } const d = c() // ^?
More interactions:
let b = false || [] // ^? const a:number[] = b const c:string[] = b b = a // error as expected b = c // expect as expected let b1 = [] // ^? const a1:number[] = b1 // did not expect error but error const c1:string[] = b1 // did not expect error but error b1 = a1 b1 = c1 // with type annotation let b2:any[] = [] // ^? const a2:number[] = b2 const c2:string[] = b2 b2 = a2 b2 = c2
playground
The behavior of inferred any[] is very interesting, the declaration and assignment both error when we attempt to assign it
Turn out the inferred any[]
type if not really an any[]
type, it is an evolving type
Top comments (0)