有没有一种方法可以获取按对象值类型过滤的对象键的并集类型?
我认为,条件类型中的类型推断适用于此,因此我在下面进行了尝试。 ({KeyOfValueType
是我想要的)
type Obj1 = { a: string, b: number };
type Obj2 = { c: number, d: string, e: string };
type KeyOfValueType<
Obj extends {},
ValueType extends Obj[keyof Obj]
> = ValueType extends Obj[infer K] ? K : never;
type Result1 = KeyOfValueType<Obj1, number>; // "b" because Obj1["b"] is equal to number
type Result2 = KeyOfValueType<Obj2, string>; // "d" | "e" because Obj2["d"] and Obj2["e"] are equals to string;
但是tt在Type 'K' cannot be used to index type 'Obj'.
处引发了一个错误Obj[infer K]
。
答案 0 :(得分:1)
有软件包https://github.com/piotrwitek/utility-types。
它具有PickByValue
和PickByValueExact
运算符(以及许多其他有用的类型运算符)。您可以将它们与keyof
一起使用以实现您的目标。他们确实为此使用了条件类型和infer
。
type PickByValue<T, ValueType> = Pick<T, {
[Key in keyof T]: T[Key] extends ValueType ? Key : never;
}[keyof T]>;
type R1 = keyof PickByValue<Obj1, number> //b
type R2 = keyof PickByValue<Obj2, string> //d | e