Flip

Challenge

Implement the type of just-flip-object. Examples:

Flip<{ a: "x"; b: "y"; c: "z" }>; // {x: 'a', y: 'b', z: 'c'}
Flip<{ a: 1; b: 2; c: 3 }>; // {1: 'a', 2: 'b', 3: 'c'}
Flip<{ a: false; b: true }>; // {false: 'a', true: 'b'}

No need to support nested objects and values which cannot be object keys such as arrays

Solution

Zur Lösung dieses Problems erstellen wir einen Mapped Type, bei der wir jeden Schlüssel / jede Eigenschaft mittels as in eine Zeichenkette mit dem Wert der Eigenschaft umwandeln:

type Flip<T extends Record<string, any>> = {
  [Key in keyof T as `${T[Key]}`]: Key;
};

References