Bug Report
π Search Terms
- Generic type self reference
- Recursive generic type
π Version & Regression Information
- This is the behavior in every version I tried, and I reviewed the FAQ for entries about "generic type self reference"
β― Playground Link
https://www.typescriptlang.org/play?#code/GYVwdgxgLglg9mABFApgZygHgFCMQFURQA9UwATNRAb1z0QG0BpRGJAaxQE85gCBdAFyIAFHABGAKxTRh+ADSJOXYU0WhIc5vwCUiALwA+ROHZg4AdzABuOgF9shsVJlQ5e2ngBOKKCC9IEtLQtg7YqBginogAhsLOwVCKyurgEHpGNHR4APQ5iEGuwtQO9Ih5StzCAEQx1dnl+RoQwqbmVvbydOLxhdDJ3KmQGcbRufl9bjSl9BXKNeL1ZRXNrWBmlmCd2HY61kA
π» Code
function test<
T extends {
[K in keyof T]: (object: T, key: K, returnValue: ReturnType<T[K]>) => unknown;
}
>(object: T) {
return object;
}
test({
a: (object, key, returnValue) => {
// object: {}
// key: "a"
// returnValue: any
return 1
},
b: (object, key, returnValue) => {
// object: {}
// key: "b"
// returnValue: any
return true
},
});
π Actual behavior
test({
a: (object, key, returnValue) => {
// object: {}
// key: "a"
// returnValue: any
return 1
},
b: (object, key, returnValue) => {
// object: {}
// key: "b"
// returnValue: any
return true
},
});
π Expected behavior
test({
a: (object, key, returnValue) => {
// object: { a: ..., b: ... }
// key: "a"
// returnValue: number
return 1
},
b: (object, key, returnValue) => {
// object: { a: ..., b: ... }
// key: "b"
// returnValue: boolean
return true
},
});
Bug Report
π Search Terms
π Version & Regression Information
β― Playground Link
https://www.typescriptlang.org/play?#code/GYVwdgxgLglg9mABFApgZygHgFCMQFURQA9UwATNRAb1z0QG0BpRGJAaxQE85gCBdAFyIAFHABGAKxTRh+ADSJOXYU0WhIc5vwCUiALwA+ROHZg4AdzABuOgF9shsVJlQ5e2ngBOKKCC9IEtLQtg7YqBginogAhsLOwVCKyurgEHpGNHR4APQ5iEGuwtQO9Ih5StzCAEQx1dnl+RoQwqbmVvbydOLxhdDJ3KmQGcbRufl9bjSl9BXKNeL1ZRXNrWBmlmCd2HY61kA
π» Code
π Actual behavior
π Expected behavior