Last week I showed you how to use Pattern Matching and more specifically the Type Pattern in TypeScript. I used a set of commands: with a corresponding command handler as an example: While reading the following article I noticed that a TypeScript compiler trick was mentioned to further improve the type safety of our code. In the article the following code was used: As it wasn’t immediately clear to me what this code does exactly I decided to write a blog post about it. Explaining the magic The TypeScript code above defines a generic type alias named CommandTypeOf . This alias takes a type parameter T that must extend from a type named Command . The resulting type of CommandTypeOf<T> is the type of the type property of T . In simpler terms, this code is used to extract the type of the type property from our Command type. You can use CommandTypeOf<CreateUserCommand> to get the type 'createUser' , which is the type of the type property in CreateUse
While preparing yesterday’s post, I was wondering if I could rewrite the following switch statement to use the new .NET 8 switch expression syntax. Here is the original code: And here is my attempt to rewrite this to a switch expression: Unfortunately this didn’t work and resulted in a compiler error: Only assignment, call, increment, decrement, await and new object expressions can be used as a statement. Turns out that switch expression cannot return void . It must return a value and this value must be consumed and cannot be discarded. Too bad! Maybe this is something that will change in future .NET versions as hinted here : The switch_expression is not permitted as an expression_statement. We are looking at relaxing this in a future revision. More information Recursive pattern matching - C# feature specifications | Microsoft Learn switch expression - Evaluate a pattern match expression using the `switch` expression - C# | Microsoft Learn