logo hsb.horse
← スニペット一覧に戻る

Snippets

Uint32Array ヘルパー関数

new Uint32Array の呼び出しを簡潔にする TypeScript ラッパー関数。オーバーロードを使ってコンストラクタの全インターフェースをサポート。

公開日: 更新日:

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 とオフセットを渡すと部分ビューを生成

内部の型ガードで引数の種類を判定し、適切なコンストラクタ呼び出しに振り分けている。