function f(...[a,b]: string[] | number[]) { if (typeof a === 'string') { return a + ':' + b; // b is number | string } else { return a + b; // error both are number | string } }
About this solution you asked: type string[] | number[] doesn't fully fit this function. Can you spot why, and what type would be better?
string[] | number[]
Let me try: is all about the length of the array? We need exactly two elements, so a tuple should be better, right?
tuple
Yes exactly, if we have static number of elements then we should use tuple type. Using number[] means we allow any number of arguments of type number.
number[]
number
function f(...[a, b]: number[]) { } function g(...[a, b]: [number, number]) { } f(1, 2, 3) // allowed g(1,2,3) // only two allowed so error
Are you sure you want to hide this comment? It will become hidden in your post, but will still be visible via the comment's permalink.
Hide child comments as well
Confirm
For further actions, you may consider blocking this person and/or reporting abuse
We're a place where coders share, stay up-to-date and grow their careers.
About this solution you asked: type
string[] | number[]
doesn't fully fit this function. Can you spot why, and what type would be better?Let me try: is all about the length of the array? We need exactly two elements, so a
tuple
should be better, right?Yes exactly, if we have static number of elements then we should use tuple type. Using
number[]
means we allow any number of arguments of typenumber
.