返回嵌套对象的通用接口

时间:2020-02-27 13:48:51

标签: typescript

interface User {
  data: {
    login: string;
  }
}
getData<T = any, K = keyof T>(data: T, key: K): T[K] {
  return data[key];
}

预期的行为是打电话

const user: User = {
  data: {
    login: 'Daniel'
  }
}

getData(user, 'data');

可以让我立即访问login键。相反,我在返回类型中有警告,但函数的结果仍然正确。选中here

如何编写函数的类型以使打字稿提示正确的键?

1 个答案:

答案 0 :(得分:1)

它们不是警告,是实际错误。 tsc告诉您K不能用于索引TType 'K' cannot be used to index type 'T'.(2536))。

您必须更改函数签名,以便像这样将K正确限制为keyof T

function getData<T, K extends keyof T>(data: T, key: K): T[K] {
  return data[key];
}

Playground link