【发布时间】:2018-12-18 22:40:50
【问题描述】:
我想要一个类型,它允许我从对象中选择那些值扩展给定类型的属性,例如:
type PickOfValue<T, V extends T[keyof T]> = {
[P in keyof (key-picking magic?)]: T[P];
};
所以不知何故我需要选择T 的键(属性),哪些值是V 的类型(条件T[P] extends V 是true),我找不到任何方法来解决这个问题所以在这里问是我最后的帮助。
示例结果:
PickOfValue<Response, () => Promise<any>>; // {json: () => Promise<any>, formData: () => Promise<FormData>, ...}
PickOfValue<{a: string | number, b: string, c: number, d: "", e: 0}, string | number>; // {a: string | number, b: string, c: number, d: "", e: 0}
【问题讨论】:
-
你想让
PickOfValue<{a: unknown, b: string | number, c: string, d: number, e: "", f: 0}, string | number>返回什么? -
{a: string | number, b: string, c: number, d: "", e: 0}因为所有值都匹配 -
对不起,我编辑了它...再检查一下?
-
b: string | number, c: string, d: number, e: "", f: 0},因为unknown extends string | number是假的,但它匹配any和never类型 -
刚刚检查,谢谢!
标签: typescript