El tipo de dato number se usa para variables que contendrán números positivos, negativos o decimales.
Operaciones
En JavaScript, una variable de tipo number puede fácilmente ser concatenado con otra de tipo string:
//JavaScriptlet myNumber =30;myNumber = myNumber +"5";//El resultado sería '305'
Sin embargo, esto podría llevar confusiones y errores durante la ejecución del programa, además de estar cambiando el tipo de dato de la variable. Por ello, en TypeScript solo se pueden hacer operaciones numéricas entre números valga la redundancia:
Serán señalados como errores aquellas variables que queramos usar sin haberles dado un valor inicial:
//TypeScriptlet productInStock:number;console.log("Product in stock: "+ productInStock);
Señalar que si no se va a inicializar aún la variable, definir explícitamente el tipo de dato, pues TypeScript no puede inferirlo si no tiene un valor inicial.
Conversión de números de tipo string a tipo number
Para esto usaremos el método parseInt:
let discount:number=parseInt("123");let numeroString:string="100";let nuevoNumero:number;nuevoNumero =parseInt(numeroString);
Esto funciona si el string tiene solo y exclusivamente números que no empiecen con 0. De lo contrario, el resultado será de tipo NaN (Not a Number):
TypeScript nos puede indicar error si intentamos definir números binarios que tengan números que no sean 0 o 1 y si declaramos hexadecimales usando valores fuera del rango:
//**********TypeScript**********//Binarios: se definen colocando "0b" al inicio del valorlet primerBinario =0b1010;//CORRECTOlet segundobinario = 0b1210;//INCORRECTO. El 2 es inválido//Hexadecimales: se definen colocando "0x" al inicio del valorlet primerHexa =0xfff;//CORRECTOlet segundoHexa = 0xffz;//INCORRECTO. El "z" es inválido
En consola, si están correctamente asignados, se hará una conversión a decimal de dichos números:
let primerHexa =0xfff;console.log(primerHexa);// 4095let primerBinario =0b1010;console.log(primerBinario);// 10
Consejo
Cuando definas una variable de tipo de dato number, es preferible que el nombre de tipo sea en minúscula. Esto como buena práctica, pues se hará referencia al tipo de dato number y no al objetoNumber propio del lenguaje:
let myNumber:number=20;// Buena practica.let otherNumber:Number=20;// Mala practica.
Tip: Si no quieres ir ejecutando todos los archivos, existe una extensión que te da los valores en tiempo real, se llama Quokka y es extremadamente útil para este tipo de cosas.
Solo la instalas y en el archivo que quieres que funcione presionas "F1" y eliges "Quokka: start on current file" es todo.
Cuando queremos inicializar una variable pero todavía no tenemos un valor que asignarle siempre debemos declarar el tipo de valor que va a contener esa variable.
let productPrice:number;
El análisis de código estático de TS nos marcara un error si trabajamos con una variable que no tiene un cierto valor.
Tipos de números
Numero hexadecimal
let hex =0xfff;
Numero binario
let bin =0b10101;
Para poder manejarlos tenemos que utilizar los primeros 2 espacios ya sea 0b para binario o 0x para hexadecimal.
number y Number
Number es un tipado pero no tiene que ver con el conjunto de números que nosotros necesitamos usar basándose en el objeto number, como conclusión no debemos trabajar con “Number” si no con “number”.
Existen varias maneras de inicializar variables en TypeScript, dependiendo de si usas tipos explícitos, inferencia de tipos o características avanzadas como valores predeterminados o null.
1. Inicialización con tipo explícito
Cuando declaras una variable en TypeScript, puedes especificar explícitamente el tipo de dato. Esto asegura que la variable solo pueda almacenar valores de ese tipo.
Ejemplo de tipo explícito:
let nombre: string = "Juan"; // Inicialización explícita de una variable tipo string
let edad: number = 30; // Inicialización explícita de una variable tipo number
let esActivo: boolean = true; // Inicialización explícita de una variable tipo boolean
En este caso, la variable nombre solo puede almacenar valores de tipo string, edad solo puede ser number y esActivo solo puede ser boolean.
2. Inicialización con inferencia de tipos
Cuando no defines explícitamente un tipo, TypeScript puede inferir el tipo basado en el valor que le asignas a la variable. Este es un enfoque más flexible que reduce la necesidad de escribir el tipo manualmente.
Ejemplo de inferencia de tipos:
let nombre = "Juan"; // Inferido como string
let edad = 30; // Inferido como number
let esActivo = true; // Inferido como boolean
Aquí, TypeScript infiere automáticamente el tipo de la variable basándose en el valor que se le asigna. En este caso, nombre será de tipo string, edad será de tipo number y esActivo será de tipo boolean.
3. Inicialización de variables con const, let y var
En TypeScript, puedes declarar variables con los siguientes modificadores de alcance:
const: Usado para declarar variables cuyo valor no cambiará después de la inicialización. El valor es constante, pero su tipo puede ser inferido. const pi = 3.14; // Inferido como number, no puede cambiar su valor
let: Usado para declarar variables cuyo valor puede cambiar. El tipo puede ser inferido o explícito.typescriptCopiar códigolet contador = 0; // Inferido como number, puede cambiar su valor
var: Aunque es menos común en TypeScript, se usa para declarar variables con un alcance de función. Tiene un comportamiento diferente en cuanto a hoisting y puede ser reemplazado por let o const en la mayoría de los casos. var mensaje = "Hola"; // Inferido como string, puede cambiar
4. Inicialización con valores predeterminados
Puedes asignar un valor predeterminado a las variables al momento de declararlas, lo cual es útil cuando quieres asegurar que la variable tenga un valor inicial adecuado.
Ejemplo con valores predeterminados:
let nombre: string = "Juan"; // Valor predeterminado "Juan"
let edad: number = 30; // Valor predeterminado 30
Si más adelante deseas cambiar el valor de la variable, puedes hacerlo sin restricciones:
nombre = "Maria"; // El tipo sigue siendo string
edad = 25; // El tipo sigue siendo number
5. Inicialización con null o undefined
En TypeScript, puedes inicializar una variable con null o undefined, pero debes tener en cuenta que esto puede hacer que el tipo sea más flexible.
Ejemplo con null o undefined:
let persona: { nombre: string, edad: number } | null = null;
En este ejemplo, persona puede ser un objeto con una propiedad nombre de tipo string y una propiedad edad de tipo number, o puede ser null. Esto es útil cuando necesitas representar un valor ausente o vacío.
Si no deseas permitir que una variable tenga valores null o undefined, puedes usar el operador strictNullChecks en el tsconfig.json para forzar una mayor seguridad de tipos.
Algo interesante que vi, es que en el parseInt si le cargamos por ejempo '12d3', en lugar de no aceptarlo como numero real, toma los primeros numeros hasta que encuentre algo que no lo es, en este caso devolveria un number 12. Solo da NaN si el value comienza con una letra.
hola, no me esta mostrando la terminal del code ningún console.log, y he comprado que esta guardado y que la ruta esta bien puesta y el watch activado desde el git bash. pero no lo muestra.!
Hola, por ahora no se puede, es decir NaN hace parte del conjunto de los números, si quieres evitar errores de tipo NaN te tocaría hacer una validación; sin embargo, si se está trabajando en una opción para que de forma opcional le digas al compilar no aceptar NaN como un número.
Absolutamente. El tipo number en TypeScript es extremadamente versátil y soporta múltiples bases numéricas directamente sin necesidad de configuraciones extra. Puedes asignar valores decimales tradicionales como let pi: number = 3.1416;, pero también puedes trabajar con sistemas numéricos más complejos usando prefijos específicos. Por ejemplo, puedes definir valores hexadecimales usando el prefijo 0x (let colorHex: number = 0xffffff;), valores binarios con el prefijo 0b (let binario: number = 0b1010;) y valores octales con 0o (let permisos: number = 0o744;). Todos estos formatos son reconocidos, procesados y validados bajo el mismo paraguas del tipo number. Esto resulta especialmente útil cuando estás desarrollando aplicaciones que interactúan con colores en CSS, operaciones a nivel de bits, criptografía o configuraciones de permisos en sistemas operativos.
(()=>{//forma inferidalet productPrice =100; productPrice =12;console.log('productPrice', productPrice);//forma explicita letcustomerAge: number =28;// forma erronea//customerAge = customerAge + '1'; //281//forma adecuada customerAge = customerAge +1;//29console.log('customerAge', customerAge);//no quiero inicializar la variable, entonces por obligación la dejo de manera explicita letproductInStock: number;console.log('productInStock', productInStock);if(productInStock >10){console.log('es mayor')}//lo convierten en INT si no lo lee dice NaNlet discount =parseInt('100');console.log('discount', discount);if(discount <=200){console.log('aplica')}else{console.log('No aplica')}//exadecimal y binarioslet hex =0xFFF;console.log('hex', hex);let bin =0b10100000000000000000000001111110000000;console.log('bin', bin);//simepre en minuscula//X const myNumber: Number = 10;constmyNumber:Number=10;})();