Búsqueda de sitios web

javascript - Conversión automática de tipo a entero en TypeScript


Estoy cambiando mi aplicación de ActionScript a Javascript/TypeScript (debido a Flash Player) y me encontré con un problema, los tipos de ActionScript convierten automáticamente el número al tipo dado y me preguntaba si esto es posible con TypeScript.

Ejemplo :

function test(x: int, y: int){
    console.log(x, y) //output: 1, 3
}

test(1.5, 3.7)

Sé que puedo usar la función Math.trunc para esto, pero imagina si tengo varios parámetros y variables int:

function test(x: number, y: number, w: number, h: number){
    x = Math.trunc(x)
    y = Math.trunc(y)
    w = Math.trunc(w)
    h = Math.trunc(h)
    
    other: number = 10;
    x = Math.trunc(x / other)
}

Nota: Tengo que usar Math.trunc todo el tiempo para mantener el valor entero.

¿Entonces esto es posible con Javascript/TypeScript? Si no, ¿hay recomendaciones de otros lenguajes para que migre?

Respuesta #1

No hay un tipo int en Typescript o Javascript.

¿Por qué no declarar simplemente una variable de función así, si estás cansado de escribir Math.trunc:

let int = Math.trunc;  // Or choose a name you like
console.log(int(48.9)); // Outputs 48

Respuesta #2

No, esto no se puede hacer automáticamente. Typescript ni siquiera tiene un tipo int (excepto BigInt, que es otra cosa completamente diferente)

Podrías crear una función de orden superior de utilidad que convierta automáticamente los argumentos numéricos y envolver tus funciones con ella, sin embargo:

function argsToInt(func) {
  return function(...args) {
    const newArgs = args.map(
      arg => typeof arg === 'number' ? Math.trunc(arg) : arg
    );
    return func(...newArgs);
  }
}

function add(a, b) { 
  return a + b 
}

const addInts = argsToInt(add);

console.log(addInts(2.532432, 3.1273))
console.log(addInts(2.532432, 3.1273)  === 5)

De esa manera, automáticamente convertirá cualquier argumento numérico a enteros sin que tengas que hacerlo en todas partes

Artículos relacionados