patternjavascriptCritical
open-ended function arguments with TypeScript
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.
So, we consume this function with any number of arguments:
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
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 (
This will then type check correctly with
...) 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.