打字稿从只读数组创建对象类型

Typescript creating Object Type from Readonly Array

我有一个这样的数组:

const arr = [{id: 2, name: "hotdog"}, {id: 3, name: "chicken"}] as const

我想从中生成一个类型,如下所示:

type ArrTransform = { readonly hotdog: 2, readonly chicken: 3 }

我试过做这样的事情(以及许多其他尝试,但这是我能做的最接近的事情):

type ArrToObject<T extends ReadonlyArray<{name: string, id: number}>> = {
  [key in T[number]["name"]]: T[number]["id"]
}

但它不会将名称与确切的 ID 映射,它会从所有 ID (2 | 3) 生成联合 - 这不是我想要的。

甚至可以在 Typescript 中创建这样的泛型吗?

仅使用 [number] 访问每个完整的单独对象,然后分别提取名称 属性(断言它将是带有 as 的键)和冒号后的 ID .

type Obj = {
    [T in typeof arr[number] as T["name"]]: T["id"]
}