ProgrammatieFrontend-ontwikkelaar

Beschrijf de verschillen tussen de types any, unknown en object in TypeScript. Wanneer moet je elk van hen gebruiken? Geef codevoorbeelden.

Slaag voor sollicitatiegesprekken met de Hintsage AI-assistent

Antwoord.

In TypeScript worden de types any, unknown en object gebruikt voor verschillende scenario's en hebben ze belangrijke verschillen:

  • any: schakelt het type-systeem uit voor de variabele. Hiermee kun je alles met de variabele doen zonder compileerfouten. Gebruik dit wanneer het type van het object vooraf onbekend is en veiligheid niet cruciaal is.
  • unknown: accepteert ook elk type, maar voor het werken met dergelijke variabelen is expliciete typecontrole of typecasting vereist. Veiligheidiger dan any. Gebruik dit voor waarden met een onbekend type om de controle over typisering niet te verliezen.
  • object: dit type is alleen voor niet-primitieve objecten (objecten, arrays, functies), maar niet voor primitieve types (getallen, strings). Beperkt het werk tot alleen objecten.

Codevoorbeeld:

let a: any = 1; a = 'string'; // OK a(); // OK (maar kan leiden tot een runtime-fout) let b: unknown = 'hello'; b = 5; // OK // b.toUpperCase(); // Fout — typecontrole vereist if (typeof b === 'string') { console.log(b.toUpperCase()); } let c: object = { key: 'value' }; c = [1, 2, 3]; // OK // c = 1; // Fout, omdat '1' geen object is

Vraag met een valstrik.

Vraag: Wat is het nut van het type unknown, als we any kunnen gebruiken?

Antwoord: unknown verhoogt de veiligheid van de code — je kunt geen ongecontroleerde acties op de variabele uitvoeren, zoals met any. Je moet het type expliciet controleren of casten, wat veel verrassingen tijdens de uitvoering uitsluit.

function handle(value: unknown) { // value.trim(); // Fout if (typeof value === 'string') { value.trim(); } }

Voorbeelden van echte fouten door het gebrek aan kennis over de nuances van het onderwerp.


Verhaal

In een project besloten ze snel een externe bibliotheek te integreren door het resultaat te beschrijven met any, zodat ze zich geen zorgen hoefden te maken over types. Als gevolg daarvan ontdekten ze tijdens de runtime dat de bibliotheek geen array terugstuurde, maar een object met velden, waardoor er massaal fouten optraden met de .map()-methode — deze code compileerde, maar viel uit tijdens de uitvoering.


Verhaal

Een van de ontwikkelaars gebruikte unknown voor gegevens die van de backend kwamen, maar voegde geen typecontroles toe voordat hij met de velden werkte. Als gevolg daarvan compileerde TypeScript de code niet — en moest snel worden omgezet naar any, wat potentiële parsingfouten verdoezelde en leidde tot bugs in productie als gevolg van een onjuist gegevensformaat.


Verhaal

Bij het werken met het type object ontstond er verwarring: ze probeerden waarden van type string en number toe te wijzen aan een variabele van type object. Hoewel ze tijdens de ontwikkeling de valstrik niet opmerkte, werden tijdens de review fouten ontdekt die verband hielden met het feit dat objectmethoden niet werkten met primitieve types. Het verhelpen hiervan kostte extra tijd.