static view_(data, offset, length, Type) {
    const buffer = shaka.util.BufferUtils.unsafeGetArrayBuffer_(data);
    let bytesPerElement = 1;
    if ('BYTES_PER_ELEMENT' in Type) {
      bytesPerElement = Type.BYTES_PER_ELEMENT;
    }
    // Absolute end of the |data| view within |buffer|.
    /** @suppress {strictMissingProperties} */
    const dataEnd = ((data.byteOffset || 0) + data.byteLength) /
      bytesPerElement;
    // Absolute start of the result within |buffer|.
    /** @suppress {strictMissingProperties} */
    const rawStart = ((data.byteOffset || 0) + offset) / bytesPerElement;
    const start = Math.floor(Math.max(0, Math.min(rawStart, dataEnd)));
    // Absolute end of the result within |buffer|.
    const end = Math.floor(Math.min(start + Math.max(length, 0), dataEnd));
    return new Type(buffer, start, end - start);
  }
@param {BufferSource} data
@param {number} offset
@param {number} length
@param {function(new:T, ArrayBuffer, number, number)} Type
@return {!T}
@template T
@private