JSFiddle - React, Tailwind, and code Playground

JavaScript

class MemoryLayout {
  constructor(layout) {
    this.byteSize = this.calculateLayoutByteSize(layout);
    this.buffer = new ArrayBuffer(this.byteSize);
    this.view = new Uint8Array(this.buffer);
    this.layout = this.createLayout(layout);
  }
  calculateLayoutByteSize(layout) {
    let byteSize = 0;
    layout.map(l => byteSize += Object.values(l)[0]);
    return byteSize;
  }
  createLayout(layout) {
    let {view, buffer} = this;
    let out = {};
    let offset = 0;
    layout.map(l => {
      let entry = Object.entries(l)[0];
      let name = entry[0];
      let byteLength = entry[1];
      out[name] = view.subarray(offset, offset + byteLength);
      offset += byteLength;
    });
    return out;
  }
};

class VkGeometryInstance extends MemoryLayout {
  constructor() {
    super([
      { transform: 12 * Float32Array.BYTES_PER_ELEMENT },
      { instanceId: 3 },
      { mask: 1 },
      { instanceOffset: 3 },
      { flags: 1 },
      { accelerationStructureHandle: 1 * BigUint64Array.BYTES_PER_ELEMENT }
    ]);
  }
};

let geometryInstance = new VkGeometryInstance();
console.log(geometryInstance.layout); // read back results using e.g. DataViews