mirror of
https://github.com/vercel-labs/scriptc.git
synced 2026-11-01 07:33:12 +08:00
`''.match(re) ?? []` typed the literal uninhabited (`never[]`), whose element still mapped through never's f64 value representation, so the whole expression was `RegExpMatchArray | number[]` — a result no single array slot can receive. A union return such as `"all" | readonly string[]` refused with SC2003 "union conversion has no unambiguous layout mapping" (`getScriptReach` in a coding agent's tool-discovery path). An EMPTY array-literal default has no element of its own: it adopts the left's present array arm, exactly the rule the union slot and the ternary arm already state for an empty literal. The left's nullish test and the lazy default are unchanged, and a default whose own type already matches the left keeps the identical lowering it had. Corpus: tests/corpus/nullish-empty-array-default.ts pins the union return, string element reads through the default, the declared optional-array slot with a fresh empty value per evaluation, and a parenthesized/template default. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>