打字稿从只读数组创建对象类型
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"]
}
我有一个这样的数组:
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"]
}