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

Snippets

Fonctions utilitaires Uint8Array

Une fonction wrapper TypeScript pour simplifier les appels new Uint8Array. Prend en charge les tableaux, ArrayBuffer et les initialisations par longueur.

Publié: Mis à jour:

Lorsque vous manipulez des données binaires avec l’API WebCrypto ou similaires, vous appelez fréquemment new Uint8Array. Écrire cette syntaxe longue à chaque fois devient fastidieux, alors j’ai préparé un wrapper plus concis.

Code

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

Exemples d’utilisation

Initialiser avec une longueur spécifiée

const arr = toU8Array(32);
// Uint8Array(32) [0, 0, 0, ...] - tampon pour valeurs aléatoires

Conversion après décodage Base64

const base64 = "SGVsbG8gV29ybGQh";
const binary = Uint8Array.from(atob(base64), c => c.charCodeAt(0));
const arr = toU8Array(binary);

Obtenir une vue partielle d’un ArrayBuffer

const buffer = new ArrayBuffer(64);
const arr = toU8Array(buffer, 16, 16);
// vue depuis l'octet 16, 16 éléments

Points d’implémentation

BYTE_LENGTH est défini comme constante pour permettre l’optimisation lors du minification. L’ordre des gardes de type est également important : d’abord vérifier si c’est un number, puis la présence de la propriété byteLength pour identifier ArrayBufferLike, et traiter le reste comme ArrayLike.

Pour les conversions simples, new Uint8Array suffit, mais ce wrapper est utile quand vous voulez une interface unifiée avec sécurité de typage.