Home > Blockchain >  How do objects narrow types correctly
How do objects narrow types correctly

Time:03-23

When I use keyof to identify the parameters of function, its return value does not narrow the parameter correctly

typescript playground

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);

CodePudding user response:

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);
  • Related