【发布时间】:2023-01-10 03:35:55
【问题描述】:
打字稿提供的 Object.entries 的类型具有返回类型 [string, T][] 但我正在搜索通用类型 Entries<O> 来表示此函数的返回值,该函数保持键和值之间的关系。
例如。当有像这样的对象类型时
type Obj = {
a: number,
b: string,
c: number
}
我正在寻找一种 Entries<O> 类型,当与 Obj 一起提供时,它会导致以下类型之一(或类似的类型):
(["a", number] | ["b", string] | ["c", number])[]
[["a", number], ["b", string], ["c", number]]
(["a" | "c", number] | ["b", string])[]
这对于 Object.entries (see here) 的所有用例都是不正确的,这对我的具体案例来说没有问题。
尝试和失败的解决方案:
type Entries<O> = [keyof O, O[keyof O]][] 对此不起作用,因为它只保留可能的键和值,但不保留它们之间的关系,因为 Entries<Obj> 是 ["a" | "b" | "c", number | string]。
type Entry<O, K extends keyof O> = [K, O[K]]
type Entries<O> = Entry<O, keyof O>[]
这里 Entry 的定义按预期工作,例如。 Entry<Obj, "a"> 是 ["a", number],但在第二行中将它应用为 keyof O 作为第二类型变量,再次导致与第一次尝试相同的结果。
【问题讨论】:
标签: typescript typescript-generics