Gegevenstypen in TypeScript
Dit artikel legt gegevenstypen in TypeScript uit.
YouTube Video
Gegevenstypen in TypeScript
TypeScript biedt een verscheidenheid aan gegevenstypen. Hiermee kunt u strikte typen definiëren voor variabelen, functieargumenten en retourwaarden. Hieronder staan de belangrijkste gegevenstypen en hun gebruik.
Primitieve typen
nummer Type
1let age: number = 25;
2console.log(age); // Outputs: 25
3console.log(typeof age); // Outputs: number
number
is een type dat wordt gebruikt voor het omgaan met numerieke waarden, inclusief gehele getallen en zwevende-kommagetallen (decimalen). Het verwerken van waarden die bepaalde limieten overschrijden, resulteert inInfinity
ofNaN
(Not-a-Number).
1// Decimal calculations
2console.log(0.1 + 0.2 === 0.3); // false
3console.log(0.1 + 0.2); // 0.30000000000000004
4
5// Calculations with large numbers
6console.log(9007199254740991 + 1); // correct value
7console.log(9007199254740991 + 2); // incorrect value
-
In TypeScript worden getallen weergegeven als zwevende-kommagetallen. Dit kan resulteren in kleine onnauwkeurigheden in berekeningsresultaten.
-
Wanneer nauwkeurige berekeningen vereist zijn, zoals bij financiële bedragen, is het noodzakelijk om afrondingsfouten zoals deze te vermijden. Bijvoorbeeld, u kunt
BigInt
oftoFixed()
gebruiken, of de decimalen aanpassen met behulp van bibliotheken zoalsdecimal.js
.
string Type
Het string
type behandelt tekstuele gegevens.
1let greeting: string = "Hello, TypeScript!";
2console.log(greeting); // Outputs: Hello, TypeScript!
3console.log(typeof greeting); // Outputs: string
boolean (Logisch Type)
Het boolean
type heeft twee waarden: true
of false
.
1let isOpen: boolean = true;
2console.log(isOpen); // Outputs: true
3console.log(typeof isOpen); // Outputs: boolean
null en undefined
null
vertegenwoordigt een 'niet-bestaande waarde', en undefined
vertegenwoordigt een 'onbepaalde waarde'.
1let emptyValue: null = null;
2let notDefined: undefined = undefined;
3
4console.log(emptyValue); // Outputs: null
5console.log(typeof emptyValue); // Outputs: object (JavaScript specification)
6
7console.log(notDefined); // Outputs: undefined
8console.log(typeof notDefined); // Outputs: undefined
Array
In TypeScript kunt u het type elementen in een array specificeren. number[]
is een array van nummers en string[]
is een array van strings.
1let numbers: number[] = [1, 2, 3, 4];
2console.log(numbers); // Outputs: [1, 2, 3, 4]
3console.log(typeof numbers); // Outputs: object
4
5let words: string[] = ["TypeScript", "JavaScript"];
6console.log(words); // Outputs: ["TypeScript", "JavaScript"]
7console.log(typeof words); // Outputs: object
Tupel
Een tupel is een array met elementen van verschillende typen.
1let person: [string, number] = ["Alice", 30];
2console.log(person); // Outputs: ["Alice", 30]
3console.log(typeof person); // Outputs: object
Enum
enum
definieert een reeks genaamde constanten.
1enum Color {
2 Red,
3 Green,
4 Blue
5}
6
7let favoriteColor: Color = Color.Green;
8console.log(favoriteColor); // Outputs: 1 (Defaults start from 0)
9console.log(typeof favoriteColor); // Outputs: number
any
Het any
type kan elk type waarde bevatten en wordt gebruikt wanneer u typecontrole wilt uitschakelen.
1let anything: any = "Hello";
2console.log(anything); // Outputs: Hello
3console.log(typeof anything); // Outputs: string
4
5anything = 42;
6console.log(anything); // Outputs: 42
7console.log(typeof anything); // Outputs: number
Union Type
Met Union types kunt u variabelen definiëren die één van meerdere typen kunnen bevatten.
1let identifier: number | string = "ID_12345";
2console.log(identifier); // Outputs: ID_12345
3console.log(typeof identifier); // Outputs: string
4
5identifier = 12345;
6console.log(identifier); // Outputs: 12345
7console.log(typeof identifier); // Outputs: number
Samenvatting
number
,string
,boolean
: Primitieve typen.null
,undefined
: Speciale waarden.Array
: Een array met typeannotaties.Tuple
: Een array met elementen van verschillende typen.enum
: Een enumeratietype.any
: Elk type.Union
: Een variabele die een van meerdere typen kan aannemen.
Door gebruik te maken van deze datatypes verbetert TypeScript de typestrictheid, waardoor fouten tijdens de ontwikkeling eenvoudiger kunnen worden voorkomen.
Wrapper-objecten
Wrapper-objecten in TypeScript zijn objecten die automatisch worden aangemaakt om primitieve datatypes als objecten te behandelen. Primitieve typen staan lichte en snelle operaties toe, terwijl objecttypen methoden en eigenschappen hebben die rijkere operaties mogelijk maken.
In JavaScript (en TypeScript) zijn er wrapper-objecten die overeenkomen met primitieve typen zoals string
, number
en boolean
. Ze worden aangemaakt met behulp van constructorfuncties genaamd String
, Number
en Boolean
.
Hieronder staan voorbeelden van wrapper-objecten.
String-object
Het String
-object biedt eigenschappen en methoden voor strings.
1let strPrimitive: string = "Hello, World!";
2let strObject: String = new String("Hello, World!");
3
4console.log(strPrimitive); // Outputs: Hello, World!
5console.log(typeof strPrimitive); // Outputs: string
6
7console.log(strObject); // Outputs: [String: 'Hello, World!']
8console.log(typeof strObject); // Outputs: object
Kenmerken:
- In tegenstelling tot primitieve
string
wordt eenString
-object doortypeof
alsobject
behandeld. - Wrapper-objecten zijn nuttig bij het manipuleren van strings of het aanroepen van methoden ervan.
Number-object
Het Number
-object biedt eigenschappen en methoden voor getallen.
1let numPrimitive: number = 42;
2let numObject: Number = new Number(42);
3
4console.log(numPrimitive); // Outputs: 42
5console.log(typeof numPrimitive); // Outputs: number
6
7console.log(numObject); // Outputs: [Number: 42]
8console.log(typeof numObject); // Outputs: object
Kenmerken:
- Het
Number
-object, als een wrapper voor getallen, bevat methoden voor numerieke operaties (bijv.toFixed
).
Boolean-object
Het Boolean
-object biedt eigenschappen en methoden voor booleaanse waarden.
1let boolPrimitive: boolean = true;
2let boolObject: Boolean = new Boolean(true);
3
4console.log(boolPrimitive); // Outputs: true
5console.log(typeof boolPrimitive); // Outputs: boolean
6
7console.log(boolObject); // Outputs: [Boolean: true]
8console.log(typeof boolObject); // Outputs: object
Kenmerken:
- Het
Boolean
-object is een wrapper voor het primitieve typeboolean
en wordt behandeld alsobject
.
Verschillen tussen wrapper-objecten en primitieve typen
Omdat wrapper-objecten als objecten worden behandeld, is er een kleine prestatieafname, maar zijn meer functionele operaties mogelijk dankzij toegevoegde eigenschappen en methoden. Bovendien zijn er verschillen in vergelijking bij gebruik van ==
en ===
.
1let numPrimitive: number = 123;
2let numObject: Number = new Number(123);
3
4console.log('== : ', numPrimitive == numObject); // Outputs: true (Value comparison)
5console.log('=== : ', numPrimitive === numObject); // Outputs: false (Due to differing types)
Kenmerken:
==
vergelijkt waarden, terwijl===
strikt vergelijkt, inclusief typen.===
retourneertfalse
bij het vergelijken van wrapper-objecten met primitieve typen.
Typconversie
In TypeScript is het belangrijk om impliciete en expliciete typeconversies correct te beheren.
Impliciete Typconversie
- In TypeScript moeten impliciete typeconversies zoveel mogelijk worden vermeden om typeveiligheid te garanderen.
1const result: string = 5 + "5"; // "55" (the number is converted to a string)
2
3console.log(result);
- In dit voorbeeld wordt het getal
5
impliciet geconverteerd naar een string, wat resulteert in de string"55"
.
Expliciete Typconversie
- In TypeScript gebruikt u typeannotaties of typeconversiefuncties om veilig typeconversies uit te voeren.
1const num: string = "123";
2const convertedNum: number = Number(num); // Converts "123" to the number 123
3
4console.log(typeof num);
5console.log(typeof convertedNum);
- In dit voorbeeld wordt de
Number()
-functie gebruikt om de string"123"
expliciet om te zetten in het getal123
.
Typecontrole
In TypeScript kunt u de typeof
-operator gebruiken om het gegevenstype van een variabele te controleren.
1// Output: The type of 42 is: number
2console.log('The type of 42 is:', typeof 42);
3
4// Output: The type of 42 is: bigint
5console.log('The type of 42n is:', typeof 42n);
6
7// Output: The type of "hello" is: string
8console.log('The type of "hello" is:', typeof "hello");
9
10// Output: The type of true is: boolean
11console.log('The type of true is:', typeof true);
12
13// Output: The type of undefined is: undefined
14console.log('The type of undefined is:', typeof undefined);
15
16// Output: The type of null is: object
17console.log('The type of null is:', typeof null);
18
19// Output: The type of Symbol() is: symbol
20console.log('The type of Symbol() is:', typeof Symbol());
21
22// Output: The type of {} is: object
23console.log('The type of {} is:', typeof {});
24
25// Output: The type of function () {} is: function
26console.log('The type of function () {} is:', typeof function () {});
- In TypeScript kunt u
typeof
gebruiken om types te controleren, maar voor nauwkeurigere typecontrole wordt ook aanbevolen om deinstanceof
- ofis
-operatoren te gebruiken.
Samenvatting
- Wrapper-objecten worden behandeld als objecten omdat ze extra methoden en eigenschappen bieden voor primitieve typen.
String
,Number
enBoolean
zijn representatieve voorbeelden van wrapper-objecten.- In tegenstelling tot primitieve typen worden wrapper-objecten door
typeof
geïdentificeerd alsobject
.
Je kunt het bovenstaande artikel volgen met Visual Studio Code op ons YouTube-kanaal. Bekijk ook het YouTube-kanaal.