TypeScript icon indicating copy to clipboard operation
TypeScript copied to clipboard

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

Open vyv03354 opened this issue 7 months ago • 0 comments

🔎 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.

vyv03354 avatar Jun 09 '25 10:06 vyv03354