Как правильно использовать fromCharCode.apply с Uint8Array в TypeScript 3?

Итак, у меня есть некоторый код, который я унаследовал, который выглядит следующим образом: String.fromCharCode.apply(null, new Uint8Array(license)); Недавно нам пришлось обновить зависимости проекта, и мы не на TypeScript 3, который жалуется, что код не является правильным с этим сообщением: Argument of type 'Uint8Array' is not assignable to parameter of type 'number[]'. Type 'Uint8Array' is missing the following properties from type 'number[]': pop, push, concat, shift, and 3 more. У меня есть несколько других мест с такими же ошибками, и все они Uint8Array, кроме одного, который является Uint16Array. Кажется, проблема связана с некоторыми изменениями в конструкторе Uint8Array, который имеет несколько перегрузок. Я попытался изменить код на const jsonKey: string = String.fromCharCode.apply(null, Array.from(new Uint8Array(license))); а также const jsonKey: string = String.fromCharCode.apply(null, Array.prototype.slice.call(new Uint8Array(license))); Ни один из них не помог воссоздать исходную функцию кода, но они подавили сообщения об ошибках.

2 ответа

Решение

Вы должны быть в состоянии сделать что-то, что будет легче читать, даже если не так компактно:

let jsonKey: string = "";
(new Uint8Array(license)).forEach(function (byte: number) {
    jsonKey += String.fromCharCode(byte);
});

Ваша первая попытка почти сработала; вам просто нужно явно указать общий параметр:

      String.fromCharCode.apply(null, Array.from<number>(new Uint8Array(license)));
Другие вопросы по тегам