В typescript для чего используется идентификатор подписи индекса?
Что делает идентификатор подписи индекса?
interface IIndex {
[something: string]: any;
}
Где бы кто-нибудь снова использовал "что-то"?
Или, другими словами, почему не синтаксис просто:
interface IIndex {
[string]: any;
}
Ответ 1
Я предполагаю, что это по соображениям последовательности и близости к JavaScript.
Также, как и обычные аргументы метода (даже в интерфейсах), все аргументы методов, конструкторов, функций и индексаторов в TS должны иметь формат name: type или name (что означает name: any). (упрощенная версия истории, но я уверен, что вы меня поняли)
Поскольку имена и типы живут в разных пространствах имен в TypeScript, аргумент формы string будет неоднозначным. Помните, что миссия TypeScript заключается в том, чтобы оставаться рядом с JavaScript, поэтому интерпретация вышеуказанного в качестве аргумента типа string была бы неприемлемой и оказалась бы действительно эквивалентной string: any.
Кроме того, хотя индексаторы могут быть исключением, поскольку они могут быть только из типов string или number, это не всегда было так (TS 0.8 разрешено any), поэтому другой причиной может быть облегчение переход на 0.9.