【发布时间】:2020-08-28 20:27:07
【问题描述】:
考虑这个返回对象属性值的 TypeScript 函数:
export function getProperty<T>(object: T, key: string): any {
return (object as any)[key]
}
使用起来不是很好,因为它总是返回一个any:
interface Animal {
name: string,
hungry: boolean,
}
const myHippo: Animal = {
name: "Hippo",
hungry: true,
}
const name = getProperty(myHippo, "name") // Returns any, but I want a string.
const size = getProperty(myHippo, "size") // Returns any, but I want a compiler error.
我希望它返回一个正确类型的值,例如string 用于"name",如果key 中提供的字符串文字不是object 的属性,则会导致编译器错误。 (我不需要支持非文字字符串,那些也可能是编译器错误。)
TypeScript 甚至可以做到这一点吗?我怀疑不是,但我不确定。
作为朝着正确方向迈出的一步有用的东西是实用程序类型Keys<T>,它表示T 中作为属性名称的所有字符串文字的联合。但这似乎不存在?
【问题讨论】:
标签: typescript types key