WebCrypto API 등에서 바이너리 데이터를 다루다 별면 new Uint32Array를 자주 호출하게 됩니다. 매번 긴 구문을 적는 건 귀찮아서, 간결하게 쓸 수 있는 래퍼를 만들었습니다.
코드
function initUint32(length: number): Uint32Array;function initUint32(array: ArrayLike<number> | ArrayBufferLike): Uint32Array;function initUint32( buffer: ArrayBufferLike, byteOffset?: number, length?: number,): Uint32Array;function initUint32( arg1: number | ArrayLike<number> | ArrayBufferLike, arg2?: number, arg3?: number,): Uint32Array { return typeof arg1 === "number" ? new Uint32Array(arg1) : "byteLength" in arg1 ? new Uint32Array(arg1, arg2, arg3) : new Uint32Array(arg1);}사용 예시
지정한 길이로 초기화
const arr = initUint32(8);// Uint32Array(8) [0, 0, 0, 0, 0, 0, 0, 0]배열에서 변환
const arr = initUint32([1, 2, 3, 4]);// Uint32Array(4) [1, 2, 3, 4]ArrayBuffer의 일부를 뷰로 가져오기
const buffer = new ArrayBuffer(32);const arr = initUint32(buffer, 8, 4);// Uint32Array(4) [0, 0, 0, 0] - 8번째 바이트부터 4개 요소구현 포인트
TypeScript 함수 오버로드를 사용하여 Uint32Array 생성자의 세 가지 호출 패턴을 타입 안전하게 구현했습니다.
- 숫자를 전달하면 해당 길이의 배열을 생성
- 배열형 객체를 전달하면 변환
- ArrayBuffer와 오프셋을 전달하면 부분 뷰를 생성
낷부의 타입 가드로 인자의 종류를 판별하고, 적절한 생성자 호출로 분기합니다.
hsb.horse