从(不同)对象类型的数组中获取所有键

Get all keys from array of (different) objects type

我有一个 FooBar 类型,它包含具有不同属性的对象。我想从所有对象中获取密钥。我认为可以通过使用 keyof FooBar[number]; 来获得,但它只有 returns 公共键。

type FooBar = [
  {
    foo: "hello";
    bar: "goodbye";
  },
  {
    foo: "hi";
    bar: "goodbye";
    fizz: "buzz";
  }
];

type FooBarKeys = keyof FooBar[number];

// type FooBarKeys = "foo" | "bar"

如何获取所有对象的所有键?

type Index<T> = {[k in keyof T]: k}  // ["0", "1"]
type Props<T> = {[k in keyof Index<T>]: keyof T[k]}  // ["foo"|"bar", "foo"|"bar"|"fizz"]
type Keys = Props<FooBar>[number];

Playground