Beim Arbeiten mit Binärdaten in WebCrypto API und ähnlichen Kontexten ruft man new Uint8Array häufig auf. Die lange Syntax jedes Mal zu schreiben ist mühsam, also habe ich einen Wrapper für kompaktere Nutzung erstellt.
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);}Nutzungsbeispiele
Mit angegebener Länge initialisieren
const arr = toU8Array(32);// Uint8Array(32) [0, 0, 0, ...] - Puffer für ZufallswerteKonvertierung nach Base64-Dekodierung
const base64 = "SGVsbG8gV29ybGQh";const binary = Uint8Array.from(atob(base64), c => c.charCodeAt(0));const arr = toU8Array(binary);Teilansicht eines ArrayBuffer erhalten
const buffer = new ArrayBuffer(64);const arr = toU8Array(buffer, 16, 16);// Ansicht ab Byte 16, 16 ElementeImplementierungsnotizen
BYTE_LENGTH ist als Konstante definiert, um Minifizierungs-Optimierungen zu ermöglichen. Die Reihenfolge der Typ-Guards ist wichtig: zuerst prüfen ob es eine number ist, dann die byteLength-Eigenschaft für ArrayBufferLike, und den Rest als ArrayLike behandeln.
Einfache Konvertierungen funktionieren mit new Uint8Array, aber dieser Wrapper zeigt seine Stärken bei typ-sicherer, einheitlicher Schnittstellenbehandlung.
hsb.horse