Funktioner i TypeScript
Den här artikeln förklarar funktioner i TypeScript.
YouTube Video
Funktioner i TypeScript
Funktioner i TypeScript är JavaScript-funktioner med tillagda typnoteringar. I TypeScript kan du skriva mer robust kod genom att tydligt definiera typerna för indata (parametrar) och utdata (returvärden) för funktioner. Nedan introducerar vi de grundläggande metoderna för att definiera funktioner och några egenskaper hos funktioner i TypeScript.
Grundläggande funktiondefinition
1function add(x: number, y: number): number {
2 return x + y;
3}
4
5console.log(add(5, 10)); // 15
- Funktionen
add
tar två argument av typennumber
och returnerar ett värde av typennumber
. - Den tar två argument,
x
ochy
, båda av typennumber
, där typerna är explicit angivna. - Returtypen är också specificerad som
: number
.
Anonyma funktioner (Funktionsuttryck)
Anonyma funktioner och funktionsuttryck kan också användas i TypeScript. Typer kan noteras på samma sätt.
1const multiply = function (x: number, y: number): number {
2 return x * y;
3};
4
5console.log(multiply(3, 4)); // 12
- Du kan tilldela en anonym funktion till en variabel och anropa den senare.
1const factorial = function fact(n: number): number {
2 if (n <= 1) return 1;
3 return n * fact(n - 1); // Can call itself recursively
4};
5
6console.log(factorial(5)); // 120
- Du kan använda ett namngivet funktionsuttryck för att möjliggöra rekursiva anrop.
Pillfunktioner
Typnoteringar kan också användas med pilfunktioner.
1const subtract = (x: number, y: number): number => {
2 return x - y;
3};
4
5console.log(subtract(10, 4)); // 6
Den här koden definierar en pilfunktion subtract
med typangivelser som tar två tal som argument och returnerar deras differens.
Valfria och standardparametrar
Parametrar kan göras valfria eller få standardvärden.
Valfria parametrar
Genom att lägga till ?
efter parameterns namn gör du den valfri.
1function greet(name?: string): string {
2 return name ? `Hello, ${name}` : "Hello!";
3}
4
5console.log(greet()); // Hello!
6console.log(greet("Alice")); // Hello, Alice
Den här koden accepterar ett valfritt argument; om argumentet ges hälsar den med namnet, annars returnerar den en generell hälsning.
Standardparametrar
Du kan också ställa in standardvärden för parametrar.
1function greetWithDefault(name: string = "Guest"): string {
2 return `Hello, ${name}`;
3}
4
5console.log(greetWithDefault()); // Hello, Guest
6console.log(greetWithDefault("Bob")); // Hello, Bob
Den här funktionen använder "Guest"
som standardvärde om inget argument anges och hälsar med det angivna eller standardnamnet.
Funktionstypedefinition
Det är också möjligt att definiera typen för själva funktionen. Detta används till exempel när du skickar en funktion som ett argument.
1type Operation = (x: number, y: number) => number;
2
3const addOperation: Operation = (x, y) => x + y;
4const multiplyOperation: Operation = (x, y) => x * y;
5
6console.log(addOperation(2, 3)); // 5
7console.log(multiplyOperation(2, 3)); // 6
Den här koden definierar en funktionstyp Operation
som tar två tal och returnerar ett tal, och använder den sedan för att skapa och köra additions- och multiplikationsfunktioner.
När det inte finns något returvärde (void
-typ)
För funktioner utan returvärden, ange void
-typen.
1function logMessage(message: string): void {
2 console.log(message);
3}
4
5logMessage("This is a message."); // This is a message.
Den här koden definierar en void
-funktion logMessage
som tar ett strängmeddelande och skriver ut det till konsolen utan att returnera ett värde.
Callbackfunktion
Att skicka en funktion som ett argument till en annan funktion och låta den köras senare kallas en callbackfunktion. Det används ofta vid asynkron bearbetning och händelsehantering.
1function processData(callback: (data: string) => void): void {
2 const data: string = "Processed Data";
3 callback(data);
4}
5
6processData((result: string): void => {
7 console.log(result);
8});
I det här exemplet skickas en funktion som skriver ut ett värde till konsolen som en callbackfunktion.
Alternativt kan du definiera en callback-typ med hjälp av type
eller interface
.
1type Callback = (data: string) => void;
2
3function processData(callback: Callback): void {
4 const data: string = "Processed Data";
5 callback(data);
6}
7
8processData((result: string): void => {
9 console.log(result);
10});
Att definiera en callback-typ med hjälp av type
eller interface
förbättrar återanvändbarheten.
Funktionöverlagring
Funktionsöverlagring gör det möjligt att definiera funktioner med samma namn men med olika parameterlistor. I TypeScript kan du definiera flera funktioner med samma namn och utföra olika operationer baserat på typer och antal av parametrar.
1// Overload Signature
2function double(value: number): number;
3function double(value: string): string;
4
5// Implementation Signature
6function double(value: number | string): number | string {
7 if (typeof value === "number") {
8 return value * 2;
9 } else if (typeof value === "string") {
10 return value + value;
11 }
12}
13
14console.log(double(10)); // 20
15console.log(double("Hello")); // HelloHello
I TypeScript uppnås överlagring enligt följande:.
-
Överlagringssignatur
- Definierar hur funktionen kan användas (dess signatur). Genom att skriva detta flera gånger blir överlagring möjlig.
-
Implementeringssignatur
- Implementerar den faktiska funktionens kodblock. Den här delen definieras bara en gång och hanterar alla fall som anges i överlagringssignaturerna.
Regler för överlagring
Följande regler gäller för funktionöverlagring:.
-
Ordning för överlagringssignaturdefinitioner
- Eftersom utvärdering sker uppifrån och ned rekommenderas det att börja med att definiera specifika typer följt av mer generiska typer.
-
Kompatibilitet för implementeringssignaturen
- Implementeringssignaturen måste vara kompatibel med argumenten och returvärdena för alla överbelastningssignaturer.
-
Ange detaljer i överbelastningssignaturer
- Implementeringssignaturen tenderar att vara tvetydig, så detaljer bör anges i överbelastningssignaturerna.
- Om endast implementeringssignaturen är definierad, kommer typinferensen för funktionen att vara otillräcklig.
Sammanfattning
Funktioner i TypeScript har följande egenskaper.
- Typanoteringar
- Genom att ange typer för argument och returvärden kan du skriva säkrare kod.
- Anonyma funktioner och pilfunktioner
- De kan användas precis som i JavaScript, och att lägga till typanoteringar förbättrar typsäkerheten.
- Valfria och standardparametrar
- Du kan göra argumenthanteringen mer flexibel vid behov.
- Funktionstypdefinitioner
- Definiera funktionens egen typ för att utföra typkontroll.
- Funktionsöverlagring
- Du kan stödja olika argument med samma funktionsnamn.
Genom att använda dessa kan du skriva tydligare och mer robust kod i TypeScript.
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.