Tuple to Object

Challenge

Give an array, transform into an object type and the key/value must in the given array.

For example:

const tuple = ["tesla", "model 3", "model X", "model Y"] as const;

type result = TupleToObject<typeof tuple>; // expected { tesla: 'tesla', 'model 3': 'model 3', 'model X': 'model X', 'model Y': 'model Y'}

Solution

Zur Lösung des Problems müssen wir einen neuen Typ basierend auf einem anderen erstellen (Mapped Type). Die Schlüssel können wir ganz einfach über die Index-Signature ‘number’ holen und anschließend iterieren:

const tuple = ["tesla", "model 3", "model X", "model Y"] as const;
type TupleElements = (typeof tuple)[number]; // 'tesla' | 'model 3' | 'model X' | ...

Damit ergibt sich folgende Lösung:

type TupleToObject<T extends readonly any[]> = {
  [key in T[number]]: key;
};

References