Skip to content

Uint8Arrays are generic in recent TypeScript versions #1847

Description

@achingbrain

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions