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 8Notes 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é.
hsb.horse