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éatoiresConversion 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émentsPoints 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.
hsb.horse