🐛 Reject mixed literal and broad universes
`UnsupportedReason` tested `IsLiteral<PatternKey<T>> extends false`.
`IsLiteral` is `boolean` for a union that mixes a literal with a broad
type (`"a" | \`x-${number}\``), so `boolean extends false` is false and
the mix was accepted. Test `extends true` instead, which rejects it.
Found while adding property-union broad-universe coverage; the gate is
shared with the primitive-union matcher.
This commit is contained in:
1 parent
55bf6c24a7
commit
1bdf7f0315
4 files changed
+13
-5
No files matched your search
@@ -145,6 +145,10 @@ inversion: the handler parameter is the member(s) of `T` whose `PatternKey` is
|
||||
object satisfy the exhaustive overload and reaches the `dispatch` throw.
|
||||
Rejecting at the boundary avoids threading an open/closed branch through
|
||||
`Handlers`, `Fallback` and `MustBePartial`.
|
||||
- **The finite-literal predicate is `IsLiteral<PatternKey<T>> extends true`.**
|
||||
`IsLiteral` is `boolean` for a union that mixes a literal with a broad type
|
||||
(`"a" | \`x-${number}\``), so `extends false`would treat the mix as
|
||||
supported;`extends true` is the check that rejects it.
|
||||
- **Collisions are rejected, not merged.** `Member<T, K>` would be sound (the
|
||||
handler gets the union), but the API is one handler per member; rejecting
|
||||
keeps `Member` a singleton and the remainder exact.
|
||||
|
||||
Reference in new issue
Block a user