Это сложно ...
Uint8Array - это просто представление ArrayBuffer, представляющего собой двоичные данные, хранящиеся в памяти.
Поэтому мой обычный совет: не храните двоичные данные вlocalStorage , потому что localStorage может хранить только строки и существуют другие API-интерфейсы хранения, которые могут обрабатывать двоичные данные, такие как IndexedDB.
Но вот что вы хотите сохранить:только случайным образом сгенерированные числа, которые вы получили от crypto API, и поскольку мы говорим о действительно маленьком ArrayBuffer, то ...
Чтобы преобразовать TypedArray в массив и сохранить его в localStorage,Вам нужно будет извлечь все значения одно за другим и переместить их в массив, или, если доступно, просто вызвать Array.from (yourTypedArray), а затем привести в соответствие этот массив:
const typedArray = new Uint8Array(16);
crypto.getRandomValues(typedArray);
const arr = Array.from // if available
? Array.from(typedArray) // use Array#from
: typedArray.map(v => v); // otherwise map()
// now stringify
const str = JSON.stringify(arr);
console.log(str);
// localStorage.setItem('foo', str);
// and to retrieve it...
// const str = localStorage.getItem('foo');
const retrievedArr = JSON.parse(str);
const retrievedTypedArray = new Uint8Array(retrievedArr);
console.log(retrievedTypedArray.byteLength);