Проблема в том, что сопоставленный тип может выполнять итерацию только над типом, который может быть ключом свойства. И именно это союз - string | number | symbol
. Если вы не сузите тип T
, машинопись не сможет использовать его в качестве ключа. Это означает, что нам нужно выполнить сужение типов только до подмножества типов, которые можно использовать в качестве ключей свойств.
К счастью, есть тип, который точно соответствует потребности - PropertyKey
. Таким образом, все изменение состоит в том, чтобы сказать:
T extends PropertyKey