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;
};