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.
- Generics
- Narrowing
- Utility types
- tsconfig
Fragen nach Level
Junior
Grundbegriffe und Syntax · 50 Fragen
Middle
Praxis, Feinheiten und Optimierung · 50 Fragen
Senior
Architektur, Interna, Randfälle · 50 Fragen
Beispielfragen
Ein paar Fragen aus jedem Level mit richtiger Antwort und Erklärung.
TypeScript · Junior
- 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.
- 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
nullstatt eines Objekts, retten einen die Typen nicht. Für Prüfungen zur Laufzeit nutzt mantypeof/instanceofund Schema-Bibliotheken (Zod, Valibot), aus denen man auch TS-Typen ableiten kann. - Wie unterscheidet sich
unknownvonany?Antwort zeigen
Richtige Antwort: Mit
unknowngeht ohne Eingrenzung nichts,anyschaltet die Prüfungen abanyschaltet die Typisierung ab und „infiziert“ alles, was es berührt.unknownist 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 ausJSON.parseundcatch (e)istunknowndie richtige Wahl. - Was bedeutet der Typ
never?Antwort zeigen
Richtige Antwort: Ein Wert, den es nicht geben kann: die Funktion kehrt nie zurück
neverist 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 inswitch.voidheißt, die Funktion endet, aber ihr Ergebnis wird nicht genutzt.
TypeScript · Middle
- Was bedeutet
<T extends { id: string }>in einem Generic?Antwort zeigen
Richtige Antwort: Eine Einschränkung:
Tmuss mindestens eine Eigenschaftid: stringhabenEine Einschränkung erlaubt in der Funktion den sicheren Zugriff auf
item.id, während das Ergebnis den vollen TypTbehält. Man kann jedes Objekt mit passendemidund weiteren Feldern übergeben. Mit Klassen und Vererbung hat das nichts zu tun. - 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 Terlaubt nur existierende Schlüssel, und der indizierte ZugriffT[K]liefert den genauen Werttyp:getProp(user, 'age')→number. Die Variante mitanyverliert die Typisierung, undstringlässt Tippfehler durch. - Was macht der bedingte Typ
T extends string ? 'text' : 'other'?Antwort zeigen
Richtige Antwort: Wählt einen der Typen, je nachdem, ob
Tzustringzuweisbar istBedingte Typen sind ein „Ternary“ auf Typebene. Zusammen mit
inferlassen sich Teile von Typen herausziehen. Auf eine Union angewendet, verteilen sie sich auf jedes Mitglied (distributive bedingte Typen). - Was macht
inferintype ElementType<T> = T extends (infer U)[] ? U : never?Antwort zeigen
Richtige Antwort: Deklariert eine Typvariable
U, die TS aus dem Abgleich mit dem Muster ableitetinfersteht nur imextends-Teil eines bedingten Typs: TS gleichtTmit dem Muster ab und „fängt“ den nötigen Teil.ElementType<string[]>→string. So funktionierenReturnType,ParametersundAwaited.
TypeScript · Senior
- Kann man mit
strictFunctionTypes(x: Dog) => voideiner Variablen vom Typ(x: Animal) => voidzuweisen?Antwort zeigen
Richtige Antwort: Nein: Funktionsparameter werden kontravariant geprüft
Die Variable verspricht, jedes
Animalanzunehmen, die Funktion kann aber nurDogverarbeiten - ein Aufruf mitCatwürde scheitern. Deshalb verläuft die Untertypbeziehung beim Parameter umgekehrt:(x: Animal) => voiddarf dort stehen, wo(x: Dog) => voiderwartet wird, aber nicht umgekehrt. - Warum gilt
strictFunctionTypesnicht für eine alshandle(x: Dog): voiddeklarierte 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 Funktionseigenschafthandle: (x: Dog) => void, ist die Prüfung streng. Deshalb zieht man für Callbacks in Interfaces oft die Eigenschaftssyntax vor. - Was ist
ToArray<string | number>, wenntype ToArray<T> = T extends any ? T[] : nevergilt?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
ExcludeundExtract. - 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 : YVerteilt 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.
Kombinierte Tests mit diesem Thema
Fragen aus mehreren Themen auf einmal, wie im Vorstellungsgespräch für eine konkrete Stelle.
- React-EntwicklerJuniorMiddleSenior
- Next.js-EntwicklerJuniorMiddleSenior
- Angular-EntwicklerJuniorMiddleSenior
- Vue-EntwicklerJuniorMiddleSenior
- Svelte-EntwicklerJuniorMiddleSenior
- Frontend-ArchitekturJuniorMiddleSenior
- Node.js-Backend-EntwicklerJuniorMiddleSenior
- QA Automation Engineer (TS)JuniorMiddleSenior
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 →