从打字稿中的对象获取特定类型的所有键[重复]
Posted
技术标签:
【中文标题】从打字稿中的对象获取特定类型的所有键[重复]【英文标题】:Get all keys of specific type from object in typescript [duplicate] 【发布时间】:2021-01-22 23:54:45 【问题描述】:标题说明了一切,但最好举个例子。
interface A
key1: string
key2: string
key3: number
type KeysOfType<O, T> = keyof
[K in keyof O]: O[K] extends T ? O[K] : never
function test<O,T>(obj: O, key: KeysOfType<O,T>)
obj[key] // should only be of type T
const aa: A =
key1: "1",
key2: "2",
key3: 3
test<A,string>(aa, "key1") // should be allowed, because key1 should be a string
test<A,string>(aa, "key3") // should NOT be allowed (but is), because key3 should be a number
但是,这允许任何keyof
接口A
。 (即,上述两个调用都是有效的)。
可以用打字稿来做到这一点吗?
【问题讨论】:
这能回答你的问题吗? How to get a subset of `keyof T` whose value, T[K] are callable functions in Typescript 简而言之,是的,您的答案是正确的。但是,我希望输入也能在函数内部工作(即 obj[key] 将被推断为类型 T),但事实并非如此。我可以看到这是不可能的或支持的,因为它有点复杂。类型系统需要知道key
只会从obj
中提取T
类型的值。
【参考方案1】:
将您的 KeysofType 定义更改为:
type KeysOfType<O, T> =
[K in keyof O]: O[K] extends T ? K : never
[keyof O]
这在this post中有详细解释。
【讨论】:
以上是关于从打字稿中的对象获取特定类型的所有键[重复]的主要内容,如果未能解决你的问题,请参考以下文章