例如我有对象类型
type FooBar = {
foo: number,
bar: string
}
我想创建这种类型
{key: "foo", value: number} | {key: "bar", value: string}
我可以创建
{key: keyof FooBar}
和
{value: FooBar[keyof FooBar]}
但我想以某种方式将它们结合起来。
答案 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}