📝 Document the two-argument fallback
Rewrite development/library.md around the new shape: the fallback is a second argument (so it can receive the remainder), `R` needs an inference site in the handler map, `Exact` restores the excess-property check, and the overload order is load-bearing. Record this branch's rejected alternatives (single-object `_`, currying, `this`/HKT, variance/`const`/`NoInfer`/brands) and the redundant- fallback known issue. Add the changelog note and check off the backlog task.
This commit is contained in:
1 parent
0d6a3f1b9b
commit
ae7ffb6fa2
3 files changed
+61
-63
No files matched your search
+4
-4
@@ -42,10 +42,10 @@ Matcher:
|
||||
✔ Clean up: adopt the 3-overload matcher (`src/prototype-ac2.ts`) and delete the prototypes @high @done
|
||||
→ `getMatcher` / `getMatcherW`, each with overloads `ExhaustiveLoose` → `Fallback` → `Handlers` (order is load-bearing)
|
||||
→ fold into `src/primitive.ts` / the public API; drop `src/prototype*.ts`
|
||||
☐ `_` should receive only the unhandled `T` keys, not all of `T` @medium
|
||||
→ today `_: (shape: T) => R`; desired `_: (shape: Exclude<T, handledKeys>) => R`
|
||||
☐ An exhaustive pattern that also carries `_` must be a compile error @medium
|
||||
→ `{ a, b, _ }` for `T = "a" | "b"` is accepted today; the redundant `_` should be rejected
|
||||
✔ `_` should receive only the unhandled `T` keys, not all of `T` @medium @done
|
||||
→ the fallback is now a second argument: `(handlers, (s) => …)`, `s: Exclude<T, keyof handlers>`
|
||||
☐ A fallback for an already-exhaustive handler map must be a compile error @medium
|
||||
→ `(handlers, fallback)` with `handlers` covering all of `T` is accepted; the redundant fallback should be rejected (currying would allow the guard)
|
||||
|
||||
Bugs:
|
||||
✔ TS 7 LSP server logs `context canceled` on stderr at shutdown @done
|
||||
|
||||
Reference in new issue
Block a user