【发布时间】:2020-05-25 06:33:24
【问题描述】:
typescript 提供的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