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 コンストラクタの3つの呼び出しパターンを型安全に実装している。
- 数値を渡すとその長さの配列を生成
- 配列風オブジェクトを渡すと変換
- ArrayBuffer とオフセットを渡すと部分ビューを生成
内部の型ガードで引数の種類を判定し、適切なコンストラクタ呼び出しに振り分けている。
hsb.horse