【发布时间】:2018-01-26 02:02:11
【问题描述】:
Typescript 不允许使用 in-operator 推断对象的类型。
例如,
function getKey<T extends object, U extends string> (obj: T, key: U) {
if (key in obj) {
return obj[key] // Type 'U' cannot be used to index type 'T'.
}
}
Typescript 应该识别出 U 是 keyof T,所以我可以将它用作键。
如何在不使用 any 的情况下解决这个问题?
【问题讨论】:
-
您希望以
U传递什么类型?如果它是string的有效子类型,您可以省略它,只使用:getKey<T extends object> (obj: T, key: string) {。如果您只想使用已知的有效密钥,请使用 Titian 的答案。 -
Fenton,我想允许任何键。我使用 in-operator 作为标志。
-
你能分享一个 TypeScript 阻止这种情况的最小工作示例吗?我能想到一个修复方法,但想先测试一下。
标签: typescript casting