Как правильно использовать 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)));