If you've written TypeScript against a FHIR API, you know the script: The "official" client returns Bundle | unknown . Every property access is a ?. chain through fog. Search parameters are strings. name works on Patient, but does family work on Practitioner? Read the spec, hope you remember. Profile narrowing (US Core, IPS) doesn't exist at the type level. You assume the resource conforms; runtime tells you when it doesn't. FHIRPath is a string. The compiler doesn't know Patient.name.given is valid and Patient.name.givven isn't. Validation is "import a JSON schema and pray it matches the version you're talking to". The frustration isn't FHIR. FHIR is huge — ~146 resources in R4, hundreds more in R5, tens of thousands of bindings — but it's a precise spec. Every resource, every search parameter, every value set is published as machine-readable JSON. There's no fundamental reason a client has to lie to your type system.…