Przejdź do głównej treści
eLearner.app
Moduł 3 · Lekcja 1 z 25/14 w kursie~12 min
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:

TS
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ść:

TS
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:

TS
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:

TS
// 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

Ćwiczenie#ts.m3.l1.e1
Próby: 0Ładowanie...

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'.

Ładowanie edytora...
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

Ćwiczenie#ts.m3.l1.e2
Próby: 0Ładowanie...

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).

Ładowanie edytora...
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

Ćwiczenie#ts.m3.l1.e3
Próby: 0Ładowanie...

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.

Ładowanie edytora...
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

Ćwiczenie#ts.m3.l1.e4
Próby: 0Ładowanie...

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.

Ładowanie edytora...
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