logo hsb.horse
← Retour à l’index des snippets

Snippets

Fonctions utilitaires Uint32Array

Un wrapper TypeScript concis pour les appels `new Uint32Array`. Supporte toutes les interfaces du constructeur via des surcharges de fonctions.

Publié: Mis à jour:

Lorsqu’on manipule des données binaires avec WebCrypto API et similaires, on finit par appeler new Uint32Array assez souvent. Écrire cette syntaxe longue à chaque fois devient fastidieux, alors j’ai créé un wrapper plus court.

Code

function initUint32(length: number): Uint32Array;
function initUint32(array: ArrayLike<number> | ArrayBufferLike): Uint32Array;
function initUint32(
buffer: ArrayBufferLike,
byteOffset?: number,
length?: number,
): Uint32Array;
function initUint32(
arg1: number | ArrayLike<number> | ArrayBufferLike,
arg2?: number,
arg3?: number,
): Uint32Array {
return typeof arg1 === "number"
? new Uint32Array(arg1)
: "byteLength" in arg1
? new Uint32Array(arg1, arg2, arg3)
: new Uint32Array(arg1);
}

Exemples d’utilisation

Initialiser avec une longueur spécifiée

const arr = initUint32(8);
// Uint32Array(8) [0, 0, 0, 0, 0, 0, 0, 0]

Convertir depuis un tableau

const arr = initUint32([1, 2, 3, 4]);
// Uint32Array(4) [1, 2, 3, 4]

Obtenir une vue sur une partie d’ArrayBuffer

const buffer = new ArrayBuffer(32);
const arr = initUint32(buffer, 8, 4);
// Uint32Array(4) [0, 0, 0, 0] - 4 éléments depuis l'octet 8

Notes d’implémentation

En utilisant les surcharges de fonctions TypeScript, cela offre un accès type-safe aux trois patterns du constructeur Uint32Array.

  • Passer un nombre pour créer un tableau de cette longueur
  • Passer un objet de type tableau pour le convertir
  • Passer un ArrayBuffer avec offset pour créer une vue partielle

Les gardes de type internes déterminent le type d’argument et dispatch vers l’appel de constructeur approprié.