ecmascript 6 - Hvordan bruger man korrekt fromCharCode.apply med Uint8Array i TypeScript 3?
Så jeg har noget kode, som jeg har arvet, der ser sådan ud: String.fromCharCode.apply(null, new Uint8Array(license)); For nylig måtte vi opdatere projektets afhængigheder, og vi er ikke på TypeScript 3, som klager over, at koden ikke er korrekt med denne besked: 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. Jeg har et par andre steder med de samme fejl, og de er alle Uint8Array undtagen én, der er en Uint16Array. Problemet ser ud til at være med nogle ændringer i Uint8Array-konstruktøren, som har flere overloads. Jeg har prøvet at ændre koden til const jsonKey: string=String.fromCharCode.apply(null, Array.from(new Uint8Array(license))); og const jsonKey: string=String.fromCharCode.apply(null, Array.prototype.slice.call(new Uint8Array(license))); Ingen af disse har fungeret til at genskabe den oprindelige funktion af koden, men de undertrykte fejlmeddelelserne.
Svar #1
Du burde kunne gøre noget, som vil være nemmere at læse, selvom det ikke er lige så kompakt:
let jsonKey: string = "";
(new Uint8Array(license)).forEach(function (byte: number) {
jsonKey += String.fromCharCode(byte);
});
Svar #2
Dit første forsøg virkede næsten; du skal bare eksplicit angive den generiske parameter:
String.fromCharCode.apply(null, Array.from<number>(new Uint8Array(license)));
