I've seen some short notions about pattern matching on code plex, but no serious discussions around it. As I'm a big fan of it, I've written up some small examples on how I think pattern matching could look in TypeScript.
This is by far no complete specification, just some ideas that I want to bring forward and have a little discussion around.
Function Overloading
// Pattern matching on functions function pickCard { (x: {suit: string; card: number; }[]): number { var pickedCard = Math.floor(Math.random() * x.length); return pickedCard; } (x: number): {suit: string; card: number; } { var pickedSuit = Math.floor(x / 13); return { suit: suits[pickedSuit], card: x % 13 }; } }
// Translation of functions.ts using sparkler // https://github.com/natefaubion/sparkler function pickCard(x) { [...{ suit @ String, card @ number }] => { var pickedCard = Math.floor(Math.random() * x.length); return pickedCard; } x @ Number => { var pickedSuit = Math.floor(x / 13); return { suit: suits[pickedSuit], card: x % 13 }; } }
Match statement
// Pattern matching using match function whoami (x: any): string { match x { case { name: string, type: 'person' }: return 'Person: ' + name; case { name: string, type: 'animal' }: return 'Animal: ' + name; default: return 'Unkown you'; } }
// Pattern matching using match translated function whoami (x) { match x { case { name @ String, type: 'person' }: return 'Person: ' + name; case { name @ String, type: 'animal' }: return 'Animal: ' + name; default: return 'Unkown you'; } }