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);
}
