Ответ 1
Я предполагаю, что это по соображениям последовательности и близости к JavaScript.
Также, как и обычные аргументы метода (даже в интерфейсах), все аргументы методов, конструкторов, функций и индексаторов в TS должны иметь формат name: type
или name
(что означает name: any
). (упрощенная версия истории, но я уверен, что вы меня поняли)
Поскольку имена и типы живут в разных пространствах имен в TypeScript, аргумент формы string
будет неоднозначным. Помните, что миссия TypeScript заключается в том, чтобы оставаться рядом с JavaScript, поэтому интерпретация вышеуказанного в качестве аргумента типа string
была бы неприемлемой и оказалась бы действительно эквивалентной string: any
.
Кроме того, хотя индексаторы могут быть исключением, поскольку они могут быть только из типов string
или number
, это не всегда было так (TS 0.8 разрешено any
), поэтому другой причиной может быть облегчение переход на 0.9.