Open
Description
π Search Terms
correlated union signature union map mapped type index
π Version & Regression Information
- This is the behavior in every version I tried
β― Playground Link
π» Code
type Definitions = {
onFoo: [arg: number];
onBar: [arg: string];
};
type SomeCallbacks = {
[K in keyof Definitions]: (...args: Definitions[K]) => void;
};
const wrapCallback = <K extends keyof SomeCallbacks>(
source: SomeCallbacks,
target: SomeCallbacks,
key: K,
) => {
const callback = source[key];
target[key] = (...args) => {
if (Math.random() > 0.5) {
return callback(...args);
}
};
};
function wrapAll(callbacks: SomeCallbacks): SomeCallbacks {
const wrapped = {} as SomeCallbacks;
for (let key in callbacks) {
wrapCallback(callbacks, wrapped, key as keyof SomeCallbacks);
}
return wrapped;
}
π Actual behavior
It fails to recognize that this function is assignable to target[key]
despite the fact that args
are contextually-typed by that target[key]
π Expected behavior
I'd expect this to typecheck just fine
Additional information about the issue
No response
Metadata
Metadata
Assignees
Labels
No labels