logo hsb.horse
← Voltar para o índice de snippets

Snippets

Funções auxiliares Uint8Array

Uma função wrapper TypeScript para simplificar chamadas new Uint8Array. Suporta arrays, ArrayBuffer e inicialização por tamanho.

Publicado: Atualizado:

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órios

Conversã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 elementos

Pontos 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.