Full details in playground and snapshot (see follow-up).
Here's the short version:
suppose you have const arr: any[] = []
TS throws an error if you try to access arr with a string, unless:
(i) the string is integer-like:
- no error:
arr["0"] = "this is not an error (expected)"
(ii) the string is decimal-like, but only if the value of the decimal portion is zero - error:
arr["2.0"] = "this is an error (expected) - no error ?!:
arr["2.4"] = "this is *not* an error (super weird)"
Also weird: TS lets you try to access an array with negative integers and integer-like strings, and the behavior seems really weird - see the playground.