aegir icon indicating copy to clipboard operation
aegir copied to clipboard

Uint8Arrays are generic in recent TypeScript versions

Open achingbrain opened this issue 5 months ago • 0 comments

Uint8Array is really Uint8Array<ArrayBufferLike> and ArrayBufferLike can be ArrayBuffer, SharedArrayBuffer, and others.

In recent TypeScript versions this breaks on APIs that only accept ArrayBuffers since ArrayBufferLike could be a SharedArrayBuffer.

const foo = new Uint8Array() makes foo be Uint8Array<ArrayBuffer> (great!), but the return type of function foo (): Uint8Array { ... } is interpreted as Uint8Array<ArrayBufferLike> so might be a SharedArrayBuffer which breaks APIs like new Blob([arr]) in TypeScript 5.9.x. Ugh.

It seems we need to change function foo (): Uint8Array { ... } to function foo (): Uint8Array<ArrayBuffer> { ... } everywhere and in all supporting modules. Double ugh.

achingbrain avatar Aug 05 '25 10:08 achingbrain