function updateValue< T extends object, R extends Exclude<keyof T, 'id'>, K extends T[R], V extends T[Exclude<keyof T, 'id'>] >(obj: T, key: R, value: K, defaultValue: V) { obj[key] = value } updateValue(alex, 'age', 30, 123123) type Test1 = { name: string, age: number } type Test2 = Test1[keyof Test1] JS function updateValue< T extends object, R extends Exclude<keyof T, 'id'>, K extends T[R], V extends T[Exclude<keyof T, 'id'>] >(obj: T, key: R, value: K, defaultValue: V) { obj[key] = value } updateValue(alex, 'age', 30, 123123) type Test1 = { name: string, age: number } type Test2 = Test1[keyof Test1] Есть может у кого-нибудь какие-нибудь ресурсы где можно подобную тему посмотреть? Зависимость дженериков друг от друга