Ao trabalhar com dados binários em WebCrypto API e contextos similares, você acaba chamando new Uint8Array frequentemente. Escrever a sintaxe longa toda vez é tedioso, então criei um wrapper para uso mais conciso.
Código
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);}Exemplos de uso
Inicializar com tamanho especificado
const arr = toU8Array(32);// Uint8Array(32) [0, 0, 0, ...] - buffer para valores aleatóriosConversão após decodificação Base64
const base64 = "SGVsbG8gV29ybGQh";const binary = Uint8Array.from(atob(base64), c => c.charCodeAt(0));const arr = toU8Array(binary);Obter visão parcial de um ArrayBuffer
const buffer = new ArrayBuffer(64);const arr = toU8Array(buffer, 16, 16);// visão a partir do byte 16, 16 elementosPontos de implementação
BYTE_LENGTH é definido como constante para permitir otimizações na minificação. A ordem dos type guards também importa: primeiro verificar se é number, depois a presença da propriedade byteLength para identificar ArrayBufferLike, e tratar o restante como ArrayLike.
Conversões simples funcionam com new Uint8Array, mas este wrapper é eficaz quando você quer uma interface unificada com segurança de tipos.
hsb.horse