Как описать тип «значение любого из ключей типа»?

Для описания типа "значение любого из ключей типа" в TypeScript можно использовать ключевое слово keyof в сочетании с оператором индексного доступа [].

Предположим, у нас есть объект с набором ключей и значениями:

type MyType = {
  key1: number;
  key2: string;
  key3: boolean;
}

Теперь нам нужно описать тип, который будет представлять "значение любого из ключей типа MyType". Мы можем сделать это, объявив новый тип с использованием keyof и оператора индексного доступа:

type ValueOfMyType = MyType[keyof MyType];

Теперь тип ValueOfMyType будет представлять значения любого из ключей типа MyType. Если мы используем его в декларации переменной, мы можем присваивать этой переменной значения из типа MyType, и TypeScript будет корректно выполнять проверку типов:

const value1: ValueOfMyType = 42;      // корректно
const value2: ValueOfMyType = "hello"; // корректно
const value3: ValueOfMyType = true;    // корректно
const value4: ValueOfMyType = [];      // ошибка компиляции, так как массив не является допустимым значением для ключей типа `MyType`

При использовании типа MyType[keyof MyType] мы создаем новый тип, который представляет собой объединение всех значений, соответствующих каждому ключу типа MyType. Это значит, что тип ValueOfMyType может принимать значения любого из ключей типа.

Таким образом, описав тип ValueOfMyType, мы можем использовать его в дальнейшем для более точного определения типов переменных и функций, связанных с объектом типа MyType.