Lekcje modułu (1/2)
Typowane funkcje
Funkcje są podstawowymi budulcami każdej aplikacji JavaScript. W TypeScript możemy precyzyjnie określać typy zarówno dla parametrów wejściowych, jak i dla wartości zwracanych, co sprawia, że nasze interfejsy i wywołania funkcji stają się niezwykle bezpieczne i stanowią doskonałą dokumentację kodu.
Parametry Opcjonalne i Domyślne
W JavaScript każdy parametr jest opcjonalny i w przypadku braku jego przekazania przyjmuje wartość undefined. W TypeScript domyślnie każdy zadeklarowany parametr jest wymagany.
Możemy jednak zdefiniować parametry opcjonalne, używając znaku zapytania (?), lub określić wartości domyślne bezpośrednio w sygnaturze.
1. Parametry Opcjonalne
Parametry opcjonalne muszą być umieszczone po parametrach wymaganych:
function greetUser(name: string, title?: string): string {
if (title) {
return `Buongiorno ${title} ${name}`;
}
return `Ciao ${name}`;
}2. Parametry Domyślne
Jeśli dla parametru z wartością domyślną nie zostanie przekazana żadna wartość, TypeScript wywnioskuje jego typ i przypisze ustaloną wartość:
function greetUserWithDefault(name: string, prefix: string = 'Ciao'): string {
return `${prefix} ${name}`;
}Parametry Rest (...args)
Gdy chcemy przyjąć zmienną liczbę argumentów, możemy użyć operatora rest. W TypeScript parametry te muszą być typowane jako tablica:
function sumAll(message: string, ...numbers: number[]): string {
const total = numbers.reduce((sum, n) => sum + n, 0);
return `${message} ${total}`;
}Typy Funkcyjne / Sygnatury (Function Types)
Możemy zdefiniować typ funkcji w sposób niezależny, aby następnie móc go użyć przy deklaracji zmiennych lub callbacków:
// Definizione del tipo tramite alias
type MathOperation = (a: number, b: number) => number;
const add: MathOperation = (x, y) => x + y;
const multiply: MathOperation = (x, y) => x * y;To podejście jest kluczowe w sytuacjach, gdy przekazujemy funkcje jako argumenty do innych funkcji (callbacki).
Spróbuj sam
Ćwiczenie 1: Parametry Opcjonalne
Utwórz funkcję o nazwie formatName, która przyjmuje parametr firstName (string) oraz opcjonalny parametr lastName (string). Jeśli podano lastName, zwróć napis w formacie 'firstName lastName', w przeciwnym razie zwróć samo 'firstName'.
Pokaż wskazówkę
Pamiętaj, że parametr opcjonalny deklaruje się jako lastName?: string po parametrze wymaganym.
Rozwiązanie dostępne po 3 próbach
Ćwiczenie 2: Parametry Domyślne
Utwórz funkcję o nazwie power, która przyjmuje parametr base (liczba) oraz exponent (liczba o domyślnej wartości równej 2). Funkcja powinna obliczyć i zwrócić wartość bazy podniesioną do potęgi wykładnika (użyj Math.pow).
Pokaż wskazówkę
Użyj base: number oraz exponent: number = 2 w sygnaturze funkcji.
Rozwiązanie dostępne po 3 próbach
Ćwiczenie 3: Typy Funkcyjne / Sygnatury
Zdefiniuj alias typu o nazwie BinaryOp opisujący funkcję, która przyjmuje dwa parametry typu number i zwraca liczbę. Następnie zadeklaruj stałą o nazwie sum typu BinaryOp, która implementuje dodawanie.
Pokaż wskazówkę
Składnia dla typu funkcyjnego to (a: number, b: number) => number.
Rozwiązanie dostępne po 3 próbach
Ćwiczenie 4: Funkcja Callback
Utwórz funkcję o nazwie processItems, która przyjmuje dwa parametry: items (tablica stringów) oraz callback (funkcja, która przyjmuje pojedynczy string i nic nie zwraca, czyli void). Funkcja powinna przeiterować pętlą for...of po każdym elemencie tablicy items i przekazać go do callbacku.
Pokaż wskazówkę
Zadeklaruj sygnaturę jako processItems(items: string[], callback: (item: string) => void): void i użyj pętli do wywoływania callbacku.
Rozwiązanie dostępne po 3 próbach