I knew I should've written a disclaimer about doing this in vanilla TypeScript

Yes, you can do it via an assert never in a switch. That isn't pattern matching. That's an exhaustive switch enforced at compile time

Which is nice, but again, it's not pattern matching.