← Alle Themen

Interviewfragen zu TypeScript mit Antworten

Typen, Generics, Narrowing, Utility- und Conditional Types, Konfiguration und Typisierung von React.

225 Fragen fürs Vorstellungsgespräch zu TypeScript mit Antworten und Erklärungen: Level Junior, Middle und Senior. Beispielfragen, Online-Tests und Programmieraufgaben.

Fragen nach Level

Beispielfragen

Ein paar Fragen aus jedem Level mit richtiger Antwort und Erklärung.

TypeScript · Junior

  1. Was ist TypeScript?
    Antwort zeigen

    Richtige Antwort: Eine Obermenge von JavaScript mit statischer Typisierung, die nach JS kompiliert

    Gültiges JS ist fast immer gültiges TS. Typen werden beim Kompilieren geprüft und dann entfernt: Zur Laufzeit läuft normales JavaScript, und dort gibt es keine Typprüfungen. Deshalb validiert man externe Daten (APIs, Formulare) trotzdem zur Laufzeit - etwa mit Zod.

  2. Prüft TypeScript Typen, während das Programm läuft?
    Antwort zeigen

    Richtige Antwort: Nein: Typen werden beim Kompilieren entfernt; zur Laufzeit läuft normales JS

    TypeScript ist ein Werkzeug für die Entwicklungszeit. Liefert eine API null statt eines Objekts, retten einen die Typen nicht. Für Prüfungen zur Laufzeit nutzt man typeof/instanceof und Schema-Bibliotheken (Zod, Valibot), aus denen man auch TS-Typen ableiten kann.

  3. Wie unterscheidet sich unknown von any?
    Antwort zeigen

    Richtige Antwort: Mit unknown geht ohne Eingrenzung nichts, any schaltet die Prüfungen ab

    any schaltet die Typisierung ab und „infiziert“ alles, was es berührt. unknown ist das sichere Gegenstück: Der Wert kann alles sein, aber man kann ihn erst nach einer Prüfung nutzen (typeof x === 'string'). Für Daten aus JSON.parse und catch (e) ist unknown die richtige Wahl.

  4. Was bedeutet der Typ never?
    Antwort zeigen

    Richtige Antwort: Ein Wert, den es nicht geben kann: die Funktion kehrt nie zurück

    never ist der leere Typ. Ihn liefern Funktionen, die immer werfen oder endlos laufen. Er taucht auch auf, wenn eine Union vollständig eingegrenzt ist - darauf bauen Vollständigkeitsprüfungen in switch. void heißt, die Funktion endet, aber ihr Ergebnis wird nicht genutzt.

Alle 75 Fragen mit Antworten →

TypeScript · Middle

  1. Was bedeutet <T extends { id: string }> in einem Generic?
    Antwort zeigen

    Richtige Antwort: Eine Einschränkung: T muss mindestens eine Eigenschaft id: string haben

    Eine Einschränkung erlaubt in der Funktion den sicheren Zugriff auf item.id, während das Ergebnis den vollen Typ T behält. Man kann jedes Objekt mit passendem id und weiteren Feldern übergeben. Mit Klassen und Vererbung hat das nichts zu tun.

  2. Wie typisiert man getProp(obj, key), damit das Ergebnis vom Schlüssel abhängt?
    Antwort zeigen

    Richtige Antwort: function getProp<T, K extends keyof T>(obj: T, key: K): T[K]

    K extends keyof T erlaubt nur existierende Schlüssel, und der indizierte Zugriff T[K] liefert den genauen Werttyp: getProp(user, 'age') → number. Die Variante mit any verliert die Typisierung, und string lässt Tippfehler durch.

  3. Was macht der bedingte Typ T extends string ? 'text' : 'other'?
    Antwort zeigen

    Richtige Antwort: Wählt einen der Typen, je nachdem, ob T zu string zuweisbar ist

    Bedingte Typen sind ein „Ternary“ auf Typebene. Zusammen mit infer lassen sich Teile von Typen herausziehen. Auf eine Union angewendet, verteilen sie sich auf jedes Mitglied (distributive bedingte Typen).

  4. Was macht infer in type ElementType<T> = T extends (infer U)[] ? U : never?
    Antwort zeigen

    Richtige Antwort: Deklariert eine Typvariable U, die TS aus dem Abgleich mit dem Muster ableitet

    infer steht nur im extends-Teil eines bedingten Typs: TS gleicht T mit dem Muster ab und „fängt“ den nötigen Teil. ElementType<string[]> → string. So funktionieren ReturnType, Parameters und Awaited.

Alle 75 Fragen mit Antworten →

TypeScript · Senior

  1. Kann man mit strictFunctionTypes (x: Dog) => void einer Variablen vom Typ (x: Animal) => void zuweisen?
    Antwort zeigen

    Richtige Antwort: Nein: Funktionsparameter werden kontravariant geprüft

    Die Variable verspricht, jedes Animal anzunehmen, die Funktion kann aber nur Dog verarbeiten - ein Aufruf mit Cat würde scheitern. Deshalb verläuft die Untertypbeziehung beim Parameter umgekehrt: (x: Animal) => void darf dort stehen, wo (x: Dog) => void erwartet wird, aber nicht umgekehrt.

  2. Warum gilt strictFunctionTypes nicht für eine als handle(x: Dog): void deklarierte Methode?
    Antwort zeigen

    Richtige Antwort: Parameter in Methodensyntax werden bivariant auf Kompatibilität geprüft

    Die Bivarianz von Methoden blieb erhalten, damit viele eingebaute Typen (z. B. Array<T>) kompatibel bleiben. Deklariert man stattdessen eine Funktionseigenschaft handle: (x: Dog) => void, ist die Prüfung streng. Deshalb zieht man für Callbacks in Interfaces oft die Eigenschaftssyntax vor.

  3. Was ist ToArray<string | number>, wenn type ToArray<T> = T extends any ? T[] : never gilt?
    Antwort zeigen

    Richtige Antwort: string[] | number[]

    Ein bedingter Typ über einem „nackten“ Typparameter verteilt sich über eine Union: Die Bedingung wird auf jedes Mitglied einzeln angewendet. Das ist ein distributiver bedingter Typ - darauf beruhen Exclude und Extract.

  4. Wie schaltet man die Verteilung eines bedingten Typs über eine Union ab?
    Antwort zeigen

    Richtige Antwort: Beide Seiten in ein Tupel packen: [T] extends [U] ? X : Y

    Verteilt wird nur, wenn der geprüfte Typ ein „nackter“ Parameter ist. Das Tupel [T] macht ihn zusammengesetzt, also wird die Union als Ganzes geprüft: [string | number] extends [string] → false. Eine Compiler-Einstellung dafür gibt es nicht.

Alle 75 Fragen mit Antworten →

Kombinierte Tests mit diesem Thema

Fragen aus mehreren Themen auf einmal, wie im Vorstellungsgespräch für eine konkrete Stelle.

Programmieraufgaben

Schreib die Lösung direkt im Browser, und Tests prüfen sie sofort. Klassiker aus Vorstellungsgesprächen zu JavaScript (debounce, deepClone, Promise.all, LRU-Cache), zu TypeScript (Generics, Narrowing und Utility Types, geprüft von einem echten Compiler), Backend-Logik in Node.js (Middleware, Rate Limits, Job-Queues), SQL-Abfragen in echtem PostgreSQL und zu React: Komponenten und Hooks wie eine Aufgabenliste, Tabs, useDebounce und useInterval.

Aufgaben öffnen →