La siguiente función genera cuerdas uuidv4.

function uuidv4() {
  return ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, c =>
    (
      c ^
      (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (c / 4)))
    ).toString(16)
  );
}
console.log(uuidv4());

Con TyperScript, cuando intento construir, recibo un error que dice:

TS2365: Operator '+' cannot be applied to types 'number[]' and '-1000'.

¿Cómo podría tener la misma función construir con éxito con TypeScript?

1
Amanda 1 jul. 2019 a las 09:29

1 respuesta

La mejor respuesta

Es una técnica de minificación. Evalúa toda la expresión allí (el ([1e7] + -1e3 + -4e3 + -8e3 + -1e11)), y obtienes la cadena

10000000-1000-4000-8000-100000000000

Por lo tanto, solo use eso, en lugar de confiar en la coerción (de la cual TypeScript no está contento):

function uuidv4() {
    return ("10000000-1000-4000-8000-100000000000").replace(/[018]/g, c =>
        (
        c ^
        (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (c / 4)))
        ).toString(16)
    );
}
console.log(uuidv4());

En este punto, también podría reemplazar a todos los no cuatro (los) con ceros, si lo desea, no cumplen ningún propósito ahora.

6
CertainPerformance 1 jul. 2019 a las 06:31