Advanced TypeScript Exercises - Question 3
Pragmatic Maciej
Posted on February 17, 2020
Hello again. Today's question is about typing function with two arguments being union type. The goal is to block possibility to pass mixed types into arguments, so if the first argument is a number
then second also needs to be number
, in other words there is dependency between arguments which we need to write.
function f(a: string | number, b: string | number) {
if (typeof a === 'string') {
return a + ':' + b; // no error but b can be number!
} else {
return a + b; // error as b can be number | string
}
}
f(2, 3); // correct usage
f(1, 'a'); // should be error
f('a', 2); // should be error
f('a', 'b') // correct usage
The whole code can be found in the playground
There is not one possibility of correct typing, can you solve this puzzle in many ways? Is it possible to type it without using type assertions? Post your answers in comments. Yes you can change the implementation also, the key is to have the same behavior + type safety. Have fun! Answer will be published soon!
This series is just starting. If you want to know about new exciting questions from advanced TypeScript please follow me on dev.to and twitter.
Posted on February 17, 2020
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.
Related
November 28, 2024