从参数推断打字稿

时间:2019-12-23 15:29:59

标签: typescript typescript-typings typescript-generics

我正在寻找一种使Typescript根据函数参数猜测函数的返回类型的方法。

function fn<T extends object>(a: T, b: T, property: keyof T): any {
  return a[property] ?? b[property];
}

我想删除any以获得正确的返回类型。

interface A {
  foo?: string;
}

const a: A = { foo : 'bar' };
const b: A = {};
const a = xor(a, b, 'foo'); // it should get the string type from inference

我像这样ReturnType<T>来使用ReturnType<typeof T[property]>,但Typescript似乎不支持它。我不知道这是否可行?

1 个答案:

答案 0 :(得分:2)

为属性名称添加另一个类型参数:

function fn<T, K extends keyof T>(a: T, b: T, property: K): T[K] {
  return a[property] ?? b[property];
}

请注意,它将推断string | undefined,而不是string,因为接口foo的{​​{1}}属性是可选的,因此Aa没有。

Playground Link