Microsoft/TypeScript

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

Open

#61,835 opened on Jun 9, 2025

View on GitHub
 (1 comment) (1 reaction) (0 assignees)TypeScript (48,455 stars) (6,726 forks)batch import
Domain: lib.d.tsHelp WantedPossible Improvement

Description

🔎 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