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
如何编写函数的类型以使打字稿提示正确的键?
答案 0 :(得分:1)
它们不是警告,是实际错误。 tsc
告诉您K
不能用于索引T
(Type '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];
}