В group1.findMember('addresses')
, K
может быть выведено как "addresses"
, поэтому возвращается Person["addresses"]
.
В group2.findMember('addresses')
, K
является параметром типа из класса верхнего уровня декларация. Используется тип по умолчанию keyof T
(все ключи T
), поскольку вы не указали K
, когда экземпляр был создан с помощью const group2 = new Group2<Person>();
. Таким образом, вы получите возвращаемый тип Person["firstName" | "lastName" | "age" | "addresses"]
, который представляет собой объединение всех возможных значений свойств.
Если вы используете const group2 = new Group2<Person, "addresses">()
, результаты должны совпадать.