Microsoft/TypeScript

The second parameter type of `apply` should be `ArrayLike<T>` instead of `T[]`

Open

#61.835 geöffnet am 9. Juni 2025

Auf GitHub ansehen
 (1 Kommentar) (1 Reaktion) (0 zugewiesene Personen)TypeScript (6.726 Forks)batch import
Domain: lib.d.tsHelp WantedPossible Improvement

Repository-Metriken

Stars
 (48.455 Stars)
PR-Merge-Metriken
 (Durchschn. Merge 6T 17h) (9 gemergte PRs in 30 T)

Beschreibung

🔎 Search Terms

String.prototype.apply

I found #33173, but the issue was closed without a reason. The problem still persists.

🕗 Version & Regression Information

At least since v3.3.3 according to the Playground.

⏯ Playground Link

https://www.typescriptlang.org/play/?#code/MYewdgzgLgBArgDhgXhmApgdxgVQJZhQICCATqQIYCeAFANoAMAHgCwCMANMywExesBmALoBKANwAoAMpRSBAOYA6AGakQAWwDCACwqlNIACbpFFAA5mANrTBxLljvATigA

💻 Code

const u8 = new Uint8Array([0x41,0x42,0x43]);
String.fromCharCode.apply(null, u8);

🙁 Actual behavior

Argument of type 'Uint8Array<ArrayBuffer>' is not assignable to parameter of type 'number[]'.
  Type 'Uint8Array<ArrayBuffer>' is missing the following properties from type 'number[]': pop, push, concat, shift, and 3 more.(2345)

🙂 Expected behavior

no error

Additional information about the issue

This code works fine at runtime. ECMAScript spec does not require a genuine array at all. ArrayLike is sufficient.

Workarounds such as

String.fromCharCode.apply(null, Array.from(u8));

will impose runtime overheads.

Contributor Guide