🐛 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
@@ -528,6 +528,8 @@ test("getPrimitiveUnionMatcher: a broad universe is rejected", () => {
|
||||
getPrimitiveUnionMatcher<number>()({ 1: () => 1 });
|
||||
// @ts-expect-error a template literal is open
|
||||
getPrimitiveUnionMatcher<`a${string}`>()({ a: () => 1 });
|
||||
// @ts-expect-error a literal mixed with a template literal is open
|
||||
getPrimitiveUnionMatcher<"a" | `x-${number}`>()({ a: () => 1 });
|
||||
// @ts-expect-error `string | boolean` is open because of `string`
|
||||
getPrimitiveUnionMatcher<string | boolean>()({ true: () => 1 });
|
||||
// @ts-expect-error the widening factory rejects broad universes too
|
||||
|
||||
Reference in new issue
Block a user