An open universe (`getMatcher<string>()`) types its handler map as an index signature, so a runtime map with fewer keys still satisfies the exhaustive overload. Calling the matcher with a missing shape reaches the dispatch guard and throws — no cast needed.