Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

SC2003 'string | undefined' when a method returning an element of its array field is used inline

Aperta
#2,400 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
30/100
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Attiva
Stack tecnologico
typescript
Ambito
compilers

Direzione di ricerca

Reproduce first: save the snippet as repro.ts and run scriptc build repro.ts; the rejection is emitted by the SC2003 union-conversion layout check. Locate where that diagnostic fires and how an inline method-call result reaches it differently than a const-bound value; the const and plain-function variants that already compile are the contrast. Read the #2319 fix for "string concatenation with possibly missing reads" as prior art. Done means the repro compiles and prints 2 with a regression test guarding it.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

A class method declared to return string returns an element of its own string[] field. Using the call result inline, as in obj.last().length, is rejected with SC2003 got 'string | undefined'. Binding the result to a const first compiles.

Reproduction

class Args {
  list: string[] = ["a", "bc"];
  last(): string {
    return this.list[this.list.length - 1];
  }
}
console.log(new Args().last().length);
$ node repro.ts
2
$ scriptc build repro.ts -o repro
repro.ts:7:13 - error SC2003: union conversion has no unambiguous layout mapping: expected 'string', got 'string | undefined' (each source arm needs an identical destination arm, a unique compatible record/array layout, or a shared literal discriminant selecting compatible layouts)

It fails 3 out of 3 builds.

What matters

variant result
repro as above SC2003
const value = new Args().last(); console.log(value.length); compiles, prints 2
same body as a plain function last(list: string[]): string, used inline compiles, prints 2
plain function reading the array from a Map, with undefined/empty guards, used inline compiles

So it needs both a method that returns an element read and an inline use of the call result. At the call site the declared return type is string, and there's no union in the source. The limitations page (array-bounds-and-runtime-errors) says a missing element that reaches storage that can't hold undefined throws a TypeError at run time. A build-time rejection that disappears once the value goes through a const looks inconsistent with that.

Possibly related

#2141 (fixed by #2319, after 0.4.5) has the same shape: an inline call result, a body that reads an array element, and binding to a variable avoids it. Its trigger was string concatenation ("x-" + PAD[i]), and the fix describes "string concatenation with possibly missing reads". This repro has no concatenation, and no release after #2319 exists yet, so I couldn't check whether it's covered.

Versions

  • scriptc 0.0.36: compiles and prints 2.
  • 0.1.1, the next version published to npm: SC2003.
  • 0.4.5: still SC2003.
  • SCRIPTC_CHECKER=tsgo gives the same result.

Where it came from

A CLI argument parser, args.value("as", "").length > 0. value() returns the last element of a string[] or a fallback. This compiled with 0.0.36 and blocks upgrading to 0.4.5.

Environment

  • scriptc 0.4.5 (@scriptc/cli-darwin-arm64)
  • macOS 26 arm64
  • Node v24.16.0 as the reference
Lingua principale
TypeScript
Stelle
6.4k
Fork
201
Merge medio
6h 24m
PR unite (30g)
913

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di vercel-labs/scriptc

Tutte le issue di vercel-labs/scriptc

Issue simili

Altre issue su TypeScript

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.