Búsqueda de sitios web

javascript - El lado izquierdo de una operación aritmética debe ser de tipo 'any', 'number' o un tipo enum


1    interface Dimensions {
2        width: Number,
3        height: Number
4    }
5
6    function findArea(dimensions: Dimensions): Number {    
7        return dimensions.height * dimensions.width;
8    }

línea 7, líneas onduladas rojas debajo de dimensions.height y dimensions.width

El lado izquierdo de una operación aritmética debe ser de tipo 'any', 'number' o un tipo enum.

Estoy intentando eliminar la línea roja ondulada, pero estoy desconcertado sobre por qué el compilador de TypeScript me está dando un error. Hasta donde puedo decir, width y height son del tipo Number.

Respuesta #1

Aquí hay otro ejemplo de que ocurre este error que podría ayudar a las personas.

Si estás usando TypeScript y tratando de calcular la diferencia entre fechas (en mi caso estaba intentando usar una cadena ISO de la base de datos):

new Date("2020-03-15T00:47:38.813Z") - new Date("2020-03-15T00:47:24.676Z")

Área de juego de TypeScript

Mostrará el error.

Sin embargo, este mismo código exacto funciona si lo pones en la consola del navegador u otro entorno de Node

new Date("2020-03-15T00:47:38.813Z") - new Date("2020-03-15T00:47:24.676Z")
14137

Puedo estar equivocado, pero creo que esto funciona debido a que el operador - utiliza implícitamente valueOf en cada uno de sus operandos. Dado que valueOf en Date devuelve un número, la operación funciona.

Sin embargo, a TypeScript no le gusta. Quizás haya una opción del compilador para esto que está forzando esta restricción y no estoy al tanto.

new Date().valueOf()
1584233296463

Puedes solucionarlo convirtiendo explícitamente los operandos en tipos numéricos (bigint) para que el - funcione.

Ejemplo fijo

new Date("2020-03-15T00:47:38.813Z").valueOf() - new Date("2020-03-15T00:47:24.676Z").valueOf()

Área de juego de TypeScript

Respuesta #2

Number debería estar en minúscula: number.

  • Ver ejemplo en Playground
  • Documentación para tipos básicos

Respuesta #3

la forma más limpia que encontré:

const diff = +new Date("2020-03-15") - +new Date("2020-03-15")

https://github.com/microsoft/TypeScript/issues/5710

Respuesta #4

puedes convertir la expresión a número.

function findArea(dimensions: Dimensions): Number {    
    return Number(dimensions.height) * Number(dimensions.width);
}

Artículos relacionados