我想实现一个函数pluck
,它返回key:value
对象
function pluck<T>(source:T,key:keyof T):Record<typeof key , T[typeof key]>{
return {[key]:source[key]}
}
但返回的类型包含传递source
的所有键,而不仅仅是key
类型定义。
如何解决这个问题?
答案 0 :(得分:1)
您的主要问题是key
的类型全部是keyof T
,它应该是扩展的通用类型 keyof T
所以它可以是推断为keyof T
中的一个键。这意味着:
function pluck<T, K extends keyof T>(source: T, key: K): Record<K, T[K]> {
return { [key]: source[key] } as Record<K, T[K]>; // see footnote*
}
这对你有用。请注意,类型Record<K, T[K]>
可以更简洁地编写为Pick<T, K>
:
function pluck<T, K extends keyof T>(source: T, key: K): Pick<T,K> {
return { [key]: source[key] } as Pick<T,K>; // see footnote*
}
希望有所帮助;祝你好运!
*请注意,您需要断言返回值的类型,因为TypeScript bug(尽管已关闭)可能无法完全解析。