Fully Typed
Every message key becomes a typed TypeScript function. Variables and conditionals are reflected in the function signature — caught at compile time, not runtime.
Define your messages in JSON, get fully-typed TypeScript functions out. No runtime parsing, no stringly-typed keys.