This ESLint rule enforces that any Uint8Array
type declaration explicitly includes <ArrayBuffer>
as its generic parameter.
An auto-fix feature is also implemented.
Using <ArrayBuffer>
ensures compatibility with WebCrypto APIs, Blob
s, and other browser features, following a TS change in v5.9 the default ArrayBufferLike
parameter is no longer guaranteed to be compatible with ArrayBuffer
(due to differences with SharedArrayBuffer
) .
npm i --save-dev @protontech/eslint-plugin-enforce-uint8array-arraybuffer
Add the plugin and rule to your ESLint config:
These usages are correct:
const a = new Uint8Array(); // this is automatically instantiated as Uint8Array<ArrayBuffer>
function f(data: Uint8Array<ArrayBuffer>) {}
type T = Promise<Uint8Array<ArrayBuffer>[]>;
While these will trigger eslint errors (Uint8Array must be used as Uint8Array<ArrayBuffer>
), but can be auto-fixed.
function f(data: Uint8Array) {} // missingGeneric error
type T = Promise<Uint8Array[]>; // missingGeneric error
If a generic argument is specified other than ArrayBuffer
, the linter will also error (Uint8Array generic argument must be exactly 'ArrayBuffer'
), but it will require manual resolution:
function f(data: Uint8Array<ArrayBufferLike>) {} // wrongGeneric error