typescript 如何从对象数组中获取第二个属性类型?

utugiqy6  于 2023-01-18  发布在  TypeScript
关注(0)|答案(1)|浏览(202)

我有一个对象Map包含idname的其他对象。
我需要从id中获取name类型。
我的尝试是:

const obj = {
    foo: { id: 1, name: 'one' },
    bar: { id: 2, name: 'two', },
    baz: { id: 3, name: 'three' },
} as const

type Obj = typeof obj;
type ValueOf<T> = T[keyof T];
type Ids = ValueOf<Obj>['id'];

type GetName<T extends Ids> = (ValueOf<Obj> & { id: T })['name']

type Foo = GetName<1>

但是Foo"one" | "two" | "three",而我期望的是"one"
如何解决呢?

nukf8bse

nukf8bse1#

通过Extract对杆件求交,而不是将它们与{ id: T }相交:

type GetName<T extends Ids> = Extract<ValueOf<Obj>, { id: T }>['name']

Playground

相关问题