有人能解释一下内置的Pick〈Type,Keys〉是如何工作的吗?
我们有:
1.提货的实施。
type Pick<T,K extends keyof T>={ // (1)
[P in K]:T[P] // (2)
}
1.待办事项对象的接口
interface Todo {
title: string
description: string
completed: boolean
}
1.我们的目标
const obj: Pick<Todo,"title">={ // (3)
title:"Hello",
}
我不知道为什么我们在第一点扩展K?
我们在点#3中有关键字“title”,然后在点#1中有“title”extends keyof Todo
。
因此,在第二点中,我们在“title”中有[P|“描述”|“已完成”]。
在这种情况下,我们可以使用[P in keyof T]代替,但它当然不起作用。
我需要帮助。
1条答案
按热度按时间rsaldnfx1#
TL; drx 1 m0n1x允许我们定义一个键的并集(
K
),其可以是T
中的密钥总数的缩减子集。因为我们将K
约束为extends keyof T
,我们还说,键必须存在于T
类型的源对象上。(例如,T[P]
),在代码的后面部分在上面的示例中,使用
Pick<Todo, 'title'>
'title'
'title' | 'description' | 'completed'
如果我们没有
K
,我们将无法提供所需的“参数”,而是被迫对T
中的所有键执行操作T
:这是我们的源对象类型(例如Todo
),我们将从中提取我们感兴趣的键(及其值类型K extends keyof T
:这是我们要提取并应用到目标对象类型(例如PickedTodo
)的关键字集(必须存在于源对象类型中)。K extends keyof Todo
的有效联合'title'
个'title' | 'description'
'description' | 'completed'
个[P in K]
:简单来说,这读起来像是'对于您提供的并集(K
)中存在的每个键(P
),执行一些操作'。title
,即K
的值是以下并集:title
个keyof Todo
(keyof T
)不同,keyof Todo
(keyof T
)是Todo
上所有键的并集,即:x1米30英寸T[P]
:使用T
作为基础,提取每个键P
的值的类型K
中只有一个键,即title
。因此,我们只需要执行一次此Map操作并将其应用于目标对象。title
,其关联值为Todo['title']
(T[P]
),我们知道该值为string
interface PickedTodo { title: string; }