Datatyper i TypeScript
Den här artikeln förklarar datatyper i TypeScript.
YouTube Video
Datatyper i TypeScript
TypeScript erbjuder en mängd olika datatyper. Detta gör att du kan definiera strikta typer för variabler, funktionsargument och returvärden. Nedan följer de huvudsakliga datatyperna och deras användning.
Primitiva typer
number-typ
1let age: number = 25;
2console.log(age); // Outputs: 25
3console.log(typeof age); // Outputs: number
number
är en typ som används för att hantera numeriska värden, inklusive heltal och flyttal (decimaler). Hantering av värden som överskrider vissa gränser resulterar 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 representeras tal som flyttal. Detta kan resultera i små felaktigheter i beräkningsresultaten.
-
När exakta beräkningar krävs, som vid finansiella belopp, är det nödvändigt att undvika sådana avrundningsfel. Du kan till exempel använda
BigInt
ellertoFixed()
, eller justera decimalplatser med hjälp av bibliotek somdecimal.js
.
string-typ
string
-typen hanterar textdata.
1let greeting: string = "Hello, TypeScript!";
2console.log(greeting); // Outputs: Hello, TypeScript!
3console.log(typeof greeting); // Outputs: string
boolean (Logisk Typ)
boolean
-typen har två värden: true
eller false
.
1let isOpen: boolean = true;
2console.log(isOpen); // Outputs: true
3console.log(typeof isOpen); // Outputs: boolean
null och undefined
null
representerar ett 'icke-existerande värde', och undefined
representerar ett 'odefinierat värde'.
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 specificera typen av element i en array. number[]
är en array av tal och string[]
är en array av strängar.
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
Tuple
En tuple är en array med element av olika typer.
1let person: [string, number] = ["Alice", 30];
2console.log(person); // Outputs: ["Alice", 30]
3console.log(typeof person); // Outputs: object
Enum
enum
definierar en uppsättning namngivna 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 innehålla vilken typ av värde som helst och används när du vill inaktivera typkontroll.
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
Unionstyp
Med unionstyper kan du definiera variabler som kan innehålla en av flera 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
Sammanfattning
number
,string
,boolean
: Primitiva typer.null
,undefined
: Specialvärden.Array
: En matris med typannoteringar.Tuple
: En array med element av olika typer.enum
: En uppräknad typ.any
: Vilken typ som helst.Union
: En variabel som kan anta en av flera typer.
Genom att använda dessa datatyper förbättrar TypeScript typsäkerheten, vilket gör det enklare att förhindra fel under utvecklingen.
Omslagsobjekt
Wrapper-objekt i TypeScript är objekt som automatiskt skapas för att behandla primitiva datatyper som objekt. Primitiva typer möjliggör lätta och snabba operationer, medan objekttyper har metoder och egenskaper som möjliggör rikare operationer.
I JavaScript (och TypeScript) finns det wrapper-objekt som motsvarar primitiva typer som string
, number
och boolean
. De skapas med konstruktionsfunktioner som kallas String
, Number
och Boolean
.
Nedan finns exempel på wrapper-objekt.
String-objekt
String
-objektet tillhandahåller egenskaper och metoder för strängar.
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
Funktioner:
- Till skillnad från den primitiva typen
string
behandlas ettString
-objekt som ettobject
avtypeof
. - Wrapper-objekt är användbara när man manipulerar strängar eller anropar metoder på dem.
Number-objekt
Number
-objektet tillhandahåller egenskaper och metoder för siffror.
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
Funktioner:
Number
-objektet, som ett wrapper-objekt för siffror, inkluderar metoder för numeriska operationer (t.ex.toFixed
).
Boolean-objekt
Boolean
-objektet tillhandahåller egenskaper och metoder för boolean-värden.
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
Funktioner:
Boolean
-objektet är ett wrapper-objekt för den primitiva typenboolean
och behandlas som ettobject
.
Skillnader mellan wrapper-objekt och primitiva typer
Eftersom wrapper-objekt behandlas som objekt sker en liten prestandaförlust, men mer funktionella operationer är möjliga tack vare tillagda egenskaper och metoder. Dessutom finns det skillnader i jämförelser med hjälp av ==
och ===
.
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)
Funktioner:
==
jämför värden, medan===
strikt jämför inklusive typer.===
returnerarfalse
när man jämför omslagobjekt med primitiva typer.
Typkonvertering
I TypeScript är det viktigt att korrekt hantera implicita och explicita typkonverteringar.
Implicit Typkonvertering
- I TypeScript bör implicita typkonverteringar undvikas så mycket som möjligt för att säkerställa typernas integritet.
1const result: string = 5 + "5"; // "55" (the number is converted to a string)
2
3console.log(result);
- I detta exempel omvandlas talet
5
implicit till en sträng, vilket resulterar i strängen"55"
.
Explicit Typkonvertering
- I TypeScript bör du använda typannoteringar eller funktioner för typkonvertering för att säkert utföra typkonverteringar.
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 detta exempel används funktionen
Number()
för att explicit konvertera strängen"123"
till talet123
.
Typkontroll
I TypeScript kan du använda operatorn typeof
för att kontrollera datatypen för 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 använda
typeof
för att kontrollera typer, men för noggrannare typkontroll rekommenderas det också att använda operatorernainstanceof
elleris
.
Sammanfattning
- Omslagsobjekt behandlas som objekt eftersom de erbjuder ytterligare metoder och egenskaper för primitiva typer.
String
,Number
ochBoolean
är representativa exempel på omslagsobjekt.- Till skillnad från primitiva typer identifieras omslagsobjekt som
object
avtypeof
.
Du kan följa med i artikeln ovan med hjälp av Visual Studio Code på vår YouTube-kanal. Vänligen kolla även in YouTube-kanalen.