подписей Index в машинописном определены следующим образом:Машинопись - Как представлять указательный подпись в качестве общего типа
словарь
[key: string]: T
Массив
[index: number]: T
Они могут быть обернуты в некоторые простые , многоразовые типы:
type DictionaryIndex<T> = {
[key: string]: T
}
type ArrayIndex<T> = {
[index: number]: T
}
Теперь я хочу обернуть их в один тип. Я попытался это:
type Index<TKey extends string|number, TValue> = {
[key: TKey]: TValue
}
Это не компилируется из-за следующей ошибки:
An index signature parameter must be of type 'string' or 'number'.
Разве это не возможно?
Какого черта?
Поскольку
foo(obj: Index<string, Bar>)
foo(obj: Index<string, Bar> & Fooable<string>)
выглядит аккуратнее, чем
foo(obj: { [key: string]: Bar })
foo(obj: { [key: string]: Bar, canFoo: (foo: string) => Bar })
В репозитории TypeScript есть проблема: https://github.com/Microsoft/TypeScript/issues/13398 Угадайте, что это еще не возможно. –