gli argomenti delle funzioni aperti con dattiloscritto

voti
82

IMO, una delle principali preoccupazioni del dattiloscritto lingua è quello di sostenere la vaniglia esistente codice JavaScript. Questa è l'impressione che ho avuto a prima vista. Date un'occhiata al seguente funzione JavaScript che è perfettamente valida:

Nota: Non sto dicendo che mi piace questo approccio. Sto solo dicendo che questo è un codice JavaScript valida.

function sum(numbers) { 

    var agregatedNumber = 0; 
    for(var i = 0; i < arguments.length; i++) { 
        agregatedNumber += arguments[i];
    }

    return agregatedNumber;
}

Quindi, che consumiamo questa funzione con un numero qualsiasi di argomenti:

console.log(sum(1, 5, 10, 15, 20));

Tuttavia, quando provo questo con dattiloscritto giochi , dà errori di compilazione tempo.

Io parto dal presupposto che si tratta di un bug. Supponiamo che non abbiamo i problemi di compatibilità. Poi, c'è un modo di scrivere questo tipo di funzioni con argomenti aperti? Come ad esempio paramsfunzione in C #?

È pubblicato 02/10/2012 alle 20:52
fonte dall'utente
In altre lingue...                            


3 risposte

voti
195

Il modo in cui dattiloscritto di fare questo è quello di mettere l'operatore di puntini di sospensione ( ...) prima del nome dell'argomento. Quanto sopra dovrebbe essere scritta come,

function sum(...numbers: number[]) {
    var aggregateNumber = 0;
    for (var i = 0; i < numbers.length; i++)
        aggregateNumber += numbers[i];
    return aggregateNumber;
}

Questo sarà quindi digitare controllare correttamente con

console.log(sum(1, 5, 10, 15, 20));
Risposto il 02/10/2012 a 20:57
fonte dall'utente

voti
2

Oltre a @chuckj risposta: È inoltre possibile utilizzare un'espressione lambda a macchina

function sum(...nums: number[]): number {
    return nums.reduce((a, b) => a + b, 0);
}
Risposto il 19/03/2017 a 09:37
fonte dall'utente

voti
0

In tipografico è il concetto di Riposo parametro , che è il parametro che riceve più valori type.If simile si bersaglio il dattiloscritto allora dobbiamo scrivere il codice ECMAScript 6 standard, allora transpiler dattiloscritto converte il codice di script Java equivalente ( che è ECMAScript 5 standard) .Se utilizziamo dattiloscritto allora dobbiamo usare tre punti (...) preferx con il nome della variabile restparameter, come ad esempio la funzione sum (... numeri: numero di []), quindi avrebbe funzionato.

Nota: Resto parametro deve essere l'ultimo parametro nella funzione somma parametro list.likewise (name: String, l'età: il numero, ... numeri: numero di []).

Risposto il 10/05/2018 a 06:56
fonte dall'utente

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more