TypeScript Academy · Les

unknown versus any begrijpen

Waarom unknown het typeveilige alternatief voor any is

Les 1 van 413 stappen

unknown versus any begrijpen is een gratis TypeScript Academy-les op CoddyKit. Dit is les 1 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject TypeScript Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus TypeScript Academy bevat in totaal 4 lessen.

Twee toptypen

TypeScript heeft twee typen die elke waarde kunnen bevatten: any en unknown. Ze lijken op elkaar, maar gedragen zich heel verschillend. Het juiste type kiezen is een belangrijke vaardigheid voor typeveilige code.

let a: any = 5;
let u: unknown = 5;
console.log(a, u);

any schakelt typecontrole uit

any is een ontsnappingsmogelijkheid waarmee je de typecontrole voor die waarde uitschakelt. Je kunt elke eigenschap benaderen of de waarde als functie aanroepen — de compiler blijft stil, zelfs als dit tijdens uitvoering tot een crash zou leiden.

const a: any = 'hello';
console.log(a.toUpperCase()); // OK
// a.doesNotExist(); // no compile error, but crashes at runtime

unknown dwingt controles af

unknown accepteert ook elke waarde, maar je kunt die waarde niet gebruiken voordat je hebt bewezen wat ze is. De compiler blokkeert toegang tot eigenschappen en functieaanroepen totdat je het type hebt vernauwd.

const u: unknown = 'hello';
// console.log(u.toUpperCase()); // Error: u is unknown
console.log(typeof u);

unknown vernauwen met typeof

Een typeof-controle vernauwt unknown binnen het blok tot een concreet type. Zodra het type is vernauwd, zijn alle methoden van dat type veilig beschikbaar.

function shout(value: unknown): string {
  if (typeof value === 'string') {
    return value.toUpperCase(); // safe here
  }
  return 'not a string';
}
console.log(shout('hi'), shout(42));

Waarom unknown veiliger is

unknown staat voor eerlijke onzekerheid: 'Ik weet nog niet wat dit is.' Het dwingt je om de waarde te valideren voordat je die gebruikt, waardoor fouten tijdens het compileren worden gevonden. any verbergt de onzekerheid en de fouten alleen maar.

function len(value: unknown): number {
  if (typeof value === 'string') return value.length;
  if (Array.isArray(value)) return value.length;
  return 0;
}
console.log(len('abc'), len([1, 2]), len(99));

Toewijzen aan en vanuit unknown

Elke waarde is toewijsbaar aan unknown. Maar unknown is alleen toewijsbaar aan unknown of any — niet aan specifieke typen zonder vernauwing. Deze asymmetrie zorgt ervoor dat het type veilig blijft.

let u: unknown = 10;
u = 'now a string';
u = true;
const anyVal: any = u; // allowed
console.log(anyVal);
// const s: string = u; // Error

any verspreidt zich door je code

Een gevaarlijke eigenschap van any is dat het zich verspreidt. Zodra een waarde any is, wordt alles wat daaruit wordt afgeleid ook any, waardoor de typeveiligheid in stilte in je hele programma afneemt.

const a: any = { count: 5 };
const total = a.count + 10; // total is any
const flag = total.whatever; // still any, no error
console.log(total);

unknown houdt het risico binnen

Met unknown blijft de onzekerheid op haar plaats. Je moet aan elke grens expliciet het type vernauwen, zodat onveilige bewerkingen zich niet verder kunnen verspreiden. Het risico blijft dus waar het hoort.

const u: unknown = { count: 5 };
if (typeof u === 'object' && u !== null && 'count' in u) {
  console.log('Has count property');
}

Typen aan API- en JSON-grenzen

Externe gegevens — JSON, netwerkreacties en gebruikersinvoer — bieden geen garanties. Door ze als unknown te typen in plaats van als any, dwing je validatie af voordat je de gegevens vertrouwt. Dat is de veilige standaard.

function parse(text: string): unknown {
  return JSON.parse(text);
}
const data = parse('{"id":1}');
if (typeof data === 'object' && data !== null) {
  console.log('Got an object');
}

Wanneer any aanvaardbaar is

any is soms een pragmatische keuze — voor snelle prototypes, een geleidelijke migratie vanuit JavaScript of interoperabiliteit met bibliotheken zonder typen. Behandel het echter als een tijdelijke markering, niet als een gewoonte. Geef waar mogelijk de voorkeur aan unknown.

// Migration placeholder, to be typed later
let legacy: any = getLegacyValue();
function getLegacyValue() { return { x: 1 }; }
console.log(legacy.x);

Een praktische vergelijking

Naast elkaar bekeken: de versie met any compileert, maar kan crashen; de versie met unknown weigert onveilige toegang te compileren. De compiler doet zijn werk en beschermt je.

const a: any = 42;
console.log(a.toFixed(2)); // OK by luck

const u: unknown = 42;
if (typeof u === 'number') {
  console.log(u.toFixed(2)); // checked, safe
}

Snelle controle

Toets je begrip van unknown en any.

Samenvatting: unknown en any

Belangrijkste punten:

  • any schakelt typecontrole uit en verspreidt zich via afgeleide waarden.
  • unknown accepteert elke waarde, maar blokkeert het gebruik ervan totdat je het type vernauwt.
  • Gebruik unknown voor externe gegevens (JSON, API's en gebruikersinvoer) om validatie af te dwingen.
  • Gebruik any alleen voor migratie of interoperabiliteit met code zonder typen, als tijdelijke markering.

Vervolgens bekijken we het lege type: never.

function safeLen(v: unknown): number {
  return typeof v === 'string' ? v.length : 0;
}
console.log(safeLen('hello'), safeLen(123));
Gratis beginnen

Leer TypeScript met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
101
Lessen
352

Veelgestelde vragen

Is de les “unknown versus any begrijpen” gratis?

Ja — de volledige tekst van “unknown versus any begrijpen” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus TypeScript Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus TypeScript Academy bevat in totaal 4 lessen.

Wat leer ik in “unknown versus any begrijpen”?

Waarom unknown het typeveilige alternatief voor any is Je oefent met TypeScript Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met TypeScript Academy te beginnen?

Ervaring vooraf is niet nodig. TypeScript Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 1 van 4.

Hoe lang duurt de les “unknown versus any begrijpen”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over TypeScript Academy?

Ja. Elke les over TypeScript Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. unknown versus any begrijpen
  2. Het never-type en onmogelijke toestanden
  3. Het void-type in functies
  4. Typeveilig omgaan met unknown
← Terug naar TypeScript Academy