是否可以从对象类型创建联合键值类型?

时间:2018-03-27 20:04:00

标签: typescript mapped-types

例如我有对象类型

type FooBar = {
  foo: number,
  bar: string
}

我想创建这种类型

{key: "foo", value: number} | {key: "bar", value: string}

我可以创建

{key: keyof FooBar}

{value: FooBar[keyof FooBar]}

但我想以某种方式将它们结合起来。

1 个答案:

答案 0 :(得分:4)

您可以使用映射类型执行此操作。将每个密钥映射到{key: <keyname>, value: <keytype>}类型,然后使用keyof构建所有密钥的并集:

type FooBar = {
  foo: number,
  bar: string
}

type KV<T> = {[K in keyof T]: {key: K, value: T[K]}}[keyof T];

declare const test: KV<FooBar>;
// `test` has type: {key: "foo", value: number} | {key: "bar", value: string}