Datatyper i TypeScript
Denne artikkelen forklarer datatyper i TypeScript.
YouTube Video
Datatyper i TypeScript
TypeScript tilbyr et utvalg av datatyper. Dette lar deg definere strenge typer for variabler, funksjonsargumenter og returverdier. Nedenfor er hoveddatatypene og deres bruk.
Primitive typer
nummer-type
1let age: number = 25;
2console.log(age); // Outputs: 25
3console.log(typeof age); // Outputs: number
number
er en type som brukes for å håndtere numeriske verdier, inkludert heltall og flyttall (desimaltall). Håndtering av verdier som overstiger visse grenser resulterer iInfinity
ellerNaN
(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
-
I TypeScript representeres tall som flyttall. Dette kan føre til små unøyaktigheter i beregningsresultater.
-
Når presise beregninger er nødvendige, som for eksempel økonomiske beløp, er det nødvendig å unngå avrundingsfeil som dette. For eksempel kan du bruke
BigInt
ellertoFixed()
, eller justere desimaler ved hjelp av biblioteker somdecimal.js
.
streng-type
string
-typen håndterer tekstdata.
1let greeting: string = "Hello, TypeScript!";
2console.log(greeting); // Outputs: Hello, TypeScript!
3console.log(typeof greeting); // Outputs: string
boolean (logisk type)
boolean
-typen har to verdier: true
eller false
.
1let isOpen: boolean = true;
2console.log(isOpen); // Outputs: true
3console.log(typeof isOpen); // Outputs: boolean
null og undefined
null
representerer en 'ikke-eksisterende verdi', og undefined
representerer en 'udefinert verdi'.
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
I TypeScript kan du spesifisere typen av elementer i arrays. number[]
er en liste med tall, og string[]
er en liste med strenger.
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
Tuples
En tuple er en liste med elementer av forskjellige typer.
1let person: [string, number] = ["Alice", 30];
2console.log(person); // Outputs: ["Alice", 30]
3console.log(typeof person); // Outputs: object
Enum (oppramsing)
enum
definerer et sett med navngitte konstanter.
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
any
-typen kan holde enhver type verdi og brukes når du vil deaktivere typekontroll.
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
Unionstype
Ved å bruke unionstyper kan du definere variabler som kan holde én av flere typer.
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
Sammendrag
number
,string
,boolean
: Primitive typer.null
,undefined
: Spesialverdier.Array
: En matrise med typeannotasjoner.Tuple
: En matrise med elementer av forskjellige typer.enum
: En enumerert type.any
: En hvilken som helst type.Union
: En variabel som kan ha én av flere typer.
Ved å bruke disse datatypene forbedrer TypeScript typesikkerheten, noe som gjør det lettere å forhindre feil under utviklingen.
Wrapper-objekter
Wrapper Objects i TypeScript er objekter som automatisk opprettes for å behandle primitivdatatyper som objekter. Primitive typer muliggjør lette og raske operasjoner, mens objekttyper har metoder og egenskaper, som gir mer avanserte operasjoner.
I JavaScript (og TypeScript) finnes det wrapper-objekter som tilsvarer primitive typer som string
, number
og boolean
. De opprettes ved å bruke konstruktørfunksjoner kalt henholdsvis String
, Number
og Boolean
.
Nedenfor er eksempler på wrapper-objekter.
String-objekt
String
-objektet gir egenskaper og metoder for strenger.
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
Funksjoner:
- I motsetning til primitive
string
behandles etString
-objekt som enobject
avtypeof
. - Wrapper-objekter er nyttige når man manipulerer strenger eller kaller metoder på dem.
Number-objekt
Number
-objektet gir egenskaper og metoder for tall.
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
Funksjoner:
Number
-objektet, som en wrapper for tall, inneholder metoder for numeriske operasjoner (f.eks.toFixed
).
Boolean-objekt
Boolean
-objektet gir egenskaper og metoder for boolske verdier.
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
Funksjoner:
Boolean
-objektet er en wrapper for den primitive typenboolean
og behandles som enobject
.
Forskjeller mellom wrapper-objekter og primitive typer
Siden wrapper-objekter behandles som objekter, er det en liten reduksjon i ytelse, men flere funksjonelle operasjoner er mulig på grunn av ekstra egenskaper og metoder. Videre er det forskjeller i sammenligning ved bruk av ==
og ===
.
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)
Funksjoner:
==
sammenligner verdier, mens===
sammenligner strengt inkludert typer.===
returnererfalse
når innpakningsobjekter sammenlignes med primitive typer.
Typekonvertering
I TypeScript er det viktig å håndtere implisitte og eksplisitte typekonverteringer på riktig måte.
Implisitt typekonvertering
- I TypeScript bør implisitte typekonverteringer unngås så mye som mulig for å sikre typesikkerhet.
1const result: string = 5 + "5"; // "55" (the number is converted to a string)
2
3console.log(result);
- I dette eksempelet blir tallet
5
implisitt konvertert til en streng, som resulterer i strengen"55"
.
Eksplisitt typekonvertering
- I TypeScript kan du bruke typeannotasjoner eller typekonverteringsfunksjoner for å trygt utføre typekonverteringer.
1const num: string = "123";
2const convertedNum: number = Number(num); // Converts "123" to the number 123
3
4console.log(typeof num);
5console.log(typeof convertedNum);
- I dette eksempelet brukes
Number()
-funksjonen til eksplisitt å konvertere strengen"123"
til tallet123
.
Typekontroll
I TypeScript kan du bruke typeof
-operatoren for å sjekke datatypen til en variabel.
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 () {});
- I TypeScript kan du bruke
typeof
til å kontrollere typer, men for mer presis typekontroll anbefales det også å brukeinstanceof
elleris
-operatorene.
Sammendrag
- Innpakningsobjekter behandles som objekter fordi de gir ekstra metoder og egenskaper for primitive typer.
String
,Number
ogBoolean
er representative eksempler på innpakningsobjekter.- I motsetning til primitive typer, identifiseres innpakningsobjekter som
object
avtypeof
.
Du kan følge med på artikkelen ovenfor ved å bruke Visual Studio Code på vår YouTube-kanal. Vennligst sjekk ut YouTube-kanalen.