'How do objects narrow types correctly
When I use keyof
to identify the parameters of function, its return value does not narrow the parameter correctly
const map = {
foo: (a: number) => a,
bar: (a: number, b: number) => a + b,
};
function fn(key:keyof typeof map) {
return map[key];
}
// Error: Expected 2 arguments, but got 1.
fn('foo')(1);
Solution 1:[1]
You need to make the function generic so that the type of the argument passed to the function gets reflected in the return type that TypeScript can infer.
const map = {
foo: (a: number) => a,
bar: (a: number, b: number) => a + b,
};
function fn<T extends keyof typeof map>(key: T) {
return map[key];
}
fn('foo')(1);
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | CertainPerformance |