Type | Treat (Type or Treat) – Tag 5/5

Die Challenge neigt sich dem Ende. Auch am letzen Tag bekommen wir nochmals eine tolle Challenge.

Der erste Teil der Challenge ist es, die Schema Namen entsprechend aus der Konstante zu generieren:

type SchemeNames = keyof typeof scheme

Im nächsten Schritt, soll die Object.keys Funktion so angepasst werden, dass die ‚Scheme Items‘ zurück gegeben werden.

interface ObjectConstructor {
    keys<T>(obj: T): keyof T;
}

function possibleSchemeItems(colors: typeof scheme) {
    const keys = Object.keys(colors)
    return keys
}

Ich habe hier bewusst auf einen Type-Cast verzichtet. Ein Type-Cast (as Keyword), drückt nämlich aus, wir als Entwickler wissen/kennen den Typen besser als der Compiler. Dies ist in den meisten Fällen der Ursprung allen Übels. Dadurch können sich schnell Bugs und diverse Fehlverhalten einschleichen. Im schlimmsten Fall, bekommen wir in der Browser Konsole einen Fehler und unsere Anwendung funktioniert nicht wie erwartet. Als Beispiel – der TypeScript Compiler beschwert sich hier nicht, es ist aber offensichtlich falsch:

const anyToString = (x: any): string => {
    return x as string;
}

anyToString(5).split(""); // [ERR]: anyToString(5).split is not a function. (In 'anyToString(5).split("")', 'anyToString(5).split' is undefined) 

Der letzte Teil der Beginner Challenge ist es nun einen weiteren Union Type anzupassen und einen ‚Record‘ Type anzupassen.

type PossibleColors = typeof scheme[SchemeNames]


// Now that you've cleaned up these types, you want to make
// sure that there's a copy of the original scheme still around.
// Can you make sure that the `previousScheme` below still has
// the same keys as the `scheme` up above?

type Scheme = Record<SchemeNames, string>;

const previousScheme: Scheme = {
    background: '#111111',
    textColor: '#c60800',
    highlightOne: '#006ba1',
};

2030cookie-checkType | Treat (Type or Treat) – Tag 5/5

Kommentar verfassen