На первом, K
явно определено.Таким образом, когда вы передаете name
, Typescript может вывести тип.Однако для второго функция getProperty2
ожидает любой keyof
T
.Таким образом, тип возвращаемого значения становится string | number
(если вы добавите больше ключа к obj
, это станет более сложным).Вот почему Typescript не уверен, какой из них вы получите.
Вы можете исправить это, используя as
следующим образом, поскольку вы уверены, что получите string
взамен.
const name3 = getProperty2(obj, 'name') as string;
name3.length;