| ▲ | loevborg 3 hours ago | |||||||||||||
FWIW, Typescript is using Strategy 2: https://www.typescriptlang.org/play/?#code/GYVwdgxgLglg9mABM... I'm a bit confused by the fact that the array starts out typed as `any[]` (e.g. if you hover over the declaration) but then, later on, the type gets refined to `(string | number)[]`. IMO it would be nicer if the declaration already showed the inferred type on hover. | ||||||||||||||
| ▲ | sheept 2 hours ago | parent | next [-] | |||||||||||||
I agree, it's always been unsettling to see any[] on hover, even though it gets typed in the end. I think one reason might be to allow the type to be refined differently in different code paths. For example:
In each branch, arr is typed as number[] and string[], respectively, and x's return type is number[] | string[]. If it decided to retroactively infer the type of arr at declaration, then I'd imagine x's return type would be the less specific (number | string)[]. | ||||||||||||||
| ▲ | bastawhiz 3 hours ago | parent | prev [-] | |||||||||||||
It depends on your tsconfig. An empty array could be typed as never[], forcing you to annotate it. | ||||||||||||||
| ||||||||||||||