ecmascript 6 - Hur använder man frånCharCode.apply korrekt med Uint8Array i TypeScript 3?


Så jag har lite kod som jag ärvt som ser ut så här: String.fromCharCode.apply(null, new Uint8Array(license)); På senare tid var vi tvungna att uppdatera projektets beroenden och vi är nu på TypeScript 3 som klagar på att koden inte är korrekt med detta meddelande: Argument of type 'Uint8Array' is not assignable to parameter of type 'number[]'. Type 'Uint8Array' saknar följande egenskaper från typen 'number[]': pop, push, concat, shift, och 3 till. Jag har några andra ställen med samma fel, och de är alla Uint8Array förutom en som är en Uint16Array. Problemet verkar vara med vissa ändringar i Uint8Array-konstruktorn som har flera överlagringar. Jag har försökt ändra koden till const jsonKey: string=String.fromCharCode.apply(null, Array.from(new Uint8Array(license))); och const jsonKey: string=String.fromCharCode.apply(null, Array.prototype.slice.call(new Uint8Array(license))); Ingen av dessa har fungerat för att återskapa kodens ursprungliga funktion, men de undertryckte felmeddelandena.

Svar #1

Du bör kunna göra något som kommer att vara lättare att läsa även om det inte är lika kompakt:

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

Svar #2

Ditt första försök fungerade nästan; du behöver bara specificera den generiska parametern uttryckligen:

String.fromCharCode.apply(null, Array.from<number>(new Uint8Array(license)));

Relaterade artiklar