HiveBrain v1.2.0
Get Started
← Back to all entries
patternjavascriptCritical

open-ended function arguments with TypeScript

Submitted by: @import:stackoverflow-api··
0
Viewed 0 times
typescriptwithfunctionopenendedarguments

Problem

IMO, one of the main concerns of the TypeScript language is to support the existing vanilla JavaScript code. This is the impression I had at first glance. Take a look at the following JavaScript function which is perfectly valid:


Note: I am not saying that I like this approach. I am just saying this is a
valid JavaScript code.

function sum(numbers) { 

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

    return agregatedNumber;
}


So, we consume this function with any number of arguments:

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


However, when I try this out with TypeScript Playground, it gives compile time errors.

I am assuming that this is a bug. Let's assume that we don't have the compatibility issues. Then, is there any way to write this type of functions with open-ended arguments? Such as params feature in C#?

Solution

The TypeScript way of doing this is to place the ellipsis operator (...) before the name of the argument. The above would be written as,

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


This will then type check correctly with

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

Code Snippets

function sum(...numbers: number[]) {
    var aggregateNumber = 0;
    for (var i = 0; i < numbers.length; i++)
        aggregateNumber += numbers[i];
    return aggregateNumber;
}
console.log(sum(1, 5, 10, 15, 20));

Context

Stack Overflow Q#12697275, score: 328

Revisions (0)

No revisions yet.