Fun with parameters

Befejeződött

A TypeScript fordító alapértelmezés szerint feltételezi, hogy a függvényben definiált összes paraméterre szükség van. Függvény meghívása esetén a TypeScript-fordító ellenőrzi a következőt:

  • Minden paraméterhez meg lett adva érték.
  • Csak a függvény által igényelt paraméterek lesznek átadva neki.
  • A paraméterek a függvényben definiált sorrendben lesznek átadva.

Ezek a követelmények eltérnek a JavaScripttől. A JavaScript feltételezi, hogy az összes paraméter nem kötelező, és lehetővé teszi, hogy több (vagy kevesebb) argumentumot adjon át a függvénynek, mint amennyit meghatároz.

A szükséges paraméterek mellett opcionális, alapértelmezett és rest paraméterekkel, valamint dekonstruált objektumparaméterekkel is definiálhat függvényeket.

Kötelező paraméterek

Az összes függvényparaméter kötelező, kivéve, ha másként van megadva, és a függvénynek átadott argumentumok számának meg kell egyeznie a függvény által elvárt paraméterek számával.

Ebben a példában minden paraméterre szükség van.

function addNumbers (x: number, y: number): number {
   return x + y;
}

addNumbers(1, 2); // Returns 3
addNumbers(1);    // Returns an error

Választható paraméterek

A választható paramétereket úgy is megadhatja, hogy hozzáfűz egy kérdőjelet (?) a paraméternév végéhez.

Ebben a példában kötelező megadni, x és y nem kötelező. Az opcionális paraméternek a paraméterlistában szereplő kötelező paraméterek után kell érkeznie. Ahhoz is, hogy ez a függvény a megfelelő értéket adja vissza, meg kell adnia annak lehetőségét, hogy y a függvény nem definiáltként adja át a függvényt.

function addNumbers (x: number, y?: number): number {
    if (y === undefined) {
        return x;
    } else {
        return x + y;
    }
}

addNumbers(1, 2); // Returns 3
addNumbers(1);    // Returns 1

Alapértelmezett paraméterek

Az alapértelmezett értékeket opcionális paraméterekhez is hozzárendelheti. Ha egy értéket argumentumként ad át az opcionális paraméternek, az érték hozzá lesz rendelve. Ellenkező esetben az alapértelmezett érték hozzá lesz rendelve. Az opcionális paraméterekhez hasonlóan az alapértelmezett paramétereknek is a paraméterlistában szereplő kötelező paraméterek után kell érkezniük.

Ebben a példában kötelező megadni, x és y nem kötelező. Ha a rendszer nem ad át yértéket, az alapértelmezett érték.25

function addNumbers (x: number, y = 25): number {
   return x + y;
}

addNumbers(1, 2);  // Returns 3
addNumbers(1);     // Returns 26

Rest Parameters

Ha több paramétert szeretne csoportként használni (például egy tömbben adja át őket). Vagy ha nem tudja, hogy egy függvény hány paramétert fog végső soron igénybe venni. Használhatja a többi paramétert. A többi paraméter korlátlan számú opcionális paraméterként van kezelve. Hagyhatja őket, vagy annyi, amennyit csak akar.

Ez a példa egy kötelező paramétert és egy opcionális paramétert is tartalmazhat restOfNumbers , amely tetszőleges számú további számot elfogad. Az előző restOfNumbers három pont (...) arra utasítja a fordítót, hogy hozzon létre egy tömböt a függvénynek átadott argumentumok közül, és rendelje hozzá az azt követő nevet, hogy használni tudja a függvényben.

let addAllNumbers = (firstNumber: number, ...restOfNumbers: number[]): number => {
   let total: number =  firstNumber;
   for(let counter = 0; counter < restOfNumbers.length; counter++) {
      if(isNaN(restOfNumbers[counter])){
         continue;
      }
      total += Number(restOfNumbers[counter]);
   }
   return total;
}

A függvény mostantól elfogad egy vagy több értéket, és visszaadja az eredményt.

addAllNumbers(1, 2, 3, 4, 5, 6, 7);  // returns 28
addAllNumbers(2);                    // returns 2
addAllNumbers(2, 3, "three");        // flags error due to data type at design time, returns 5

Dekonstruált objektumparaméterek

A függvényparaméterek pozíciósak, és a függvényben definiált sorrendben kell megadni őket. A pozícióparaméterek kevésbé olvashatóvá tehetik a kódot, ha több olyan paramétert hív meg, amelyek nem kötelezőek vagy azonos adattípusúak.

Az elnevezett paraméterek engedélyezéséhez használhatja a dekonstruált objektumparaméterek nevű technikát. Ez a technika lehetővé teszi, hogy a függvények nevesített paraméterei helyett egy interfészt használjon.

Az alábbi példa egy olyan felületet Message határoz meg, amely két tulajdonságot határoz meg. A függvényben az displayMessageMessage objektum paraméterként lesz átadva, és úgy biztosít hozzáférést a tulajdonságokhoz, mintha normál paraméterek lennének.

interface Message {
   text: string;
   sender: string;
}

function displayMessage({text, sender}: Message) {
    console.log(`Message from ${sender}: ${text}`);
}

displayMessage({sender: 'Christopher', text: 'hello, world'});