给出这样的界面:
interface IDelegates {
delegateOne: (name: string, age: number) => string;
delegateTwo: (date: Date) => number;
}
如何基于接口属性名称定义一个采用正确委托类型的func的方法?
我可以使用Pick<IDelegates, 'delegateOne'>
获得一个只包含我想要的属性的类型,它返回一个类型:
{
delegateOne: (name: string, age: number) => string;
}
但是我不知道是否有办法做Parameters<Pick<IDelegates, 'delegateOne'>>
我明白为什么这不起作用,但是事情可能有办法吗?基本上,我需要PickOne
之类的东西来返回 just 属性'delegateOne',而不是类型包含的属性。
答案 0 :(得分:1)
您想要lookup types而不是使用Pick<T, K>
,实际上更简单。如果您具有对象类型T
和可分配给K
的密钥类型keyof T
,则具有密钥T
的{{1}}属性的类型为: K
。因此,您可以在类型级别使用熟悉的括号索引访问符号。
(在旁边:请注意,you cannot use dot notation for lookup types即使T[K]
是字符串文字类型。例如,您需要编写类型K
以获得Array<string>["length"]
而不是{ {1}}。点已经在类型级别用于命名空间,因此他们不想引入歧义和可能的名称冲突,因为它们允许相同的符号表示两种不同的类型操作。)
在the definition of Pick<T, K>
中并非偶然使用查找类型来获取number
的键集中的Array<string>.length
的每个属性:
T
无论如何,这意味着您应该这样做:
K
好的,希望能有所帮助。祝你好运!