In JavaScript, keys of object literals are always strings, and internal type conversions are performed. Now if we tell the compiler that keys are numbers, we get inconsistent types when iterating through keys. So instead we set the key type to string and do a type cast to make the compiler happy. Note that we could also do toString() instead of a type cast, but it would add a performance penalty (see http://jsperf.com/internal-type-conversion-vs-tostring-for-object-keys).