Если кратко - "потому что так мир устроен".
{[K in keyof T]: ...}
- это специальный особый паттерн, где ты итерируешься по ключам "локального типа" внутри генерика (аналог локальной переменной внутри функции). Важен тот факт, что тип именно локальный - либо параметр генерика, либо что-то, извлеченное с помощью infer.
В этом случае, во первых, игнорируется обработка примитивных типов, во вторых, если в T окажется массив или кортеж (если убрать ограничение на строку), то результат будет аналогичным массивом/кортежем той же конструкции, в третьих, если в T передать объединение типов, то происходит их дистрибуция, аналогичная
этой, когда каждый элемент в объединении обрабатывается отдельно.
Если чуть изменить MappedGenericStringType, то паттерн разваливается и вся вышеописанная магия исчезает:
type MappedGenericStringType1<T, Keys extends keyof T = keyof T> = {
[K in Keys]: any;
};
// или так
type MappedGenericStringType2<T> = keyof T extends infer Keys extends keyof T ? {
[K in Keys]: any;
} : never;