No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Numbers

9/24
Recursos

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:

//JavaScript
let 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:

//TypeScript
let myNumber: number = 30;

myNumber = myNumber + 10; //CORRECTO
myNumber = myNumber + "10"; //INCORRECTO

Uso de variables sin inicializar

  • Serán señalados como errores aquellas variables que queramos usar sin haberles dado un valor inicial:
//TypeScript
let 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
let numeroPrueba: number = parseInt("palabra");
console.log(numeroPrueba); //NaN

Binarios y Hexadecimales

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 valor
let primerBinario = 0b1010; //CORRECTO
let segundobinario = 0b1210; //INCORRECTO. El 2 es inválido

//Hexadecimales: se definen colocando "0x" al inicio del valor
let primerHexa = 0xfff; //CORRECTO
let 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); // 4095

let 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 objeto Number propio del lenguaje:

let myNumber: number = 20; // Buena practica.
let otherNumber: Number = 20; // Mala practica.

Contribución creada por: Martín Álvarez.

Aportes 19

Preguntas 4

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

o inicia sesión.

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.

Resumen de la clase:

  • NaN tambien aplica como tipo de dato “number”
  • Datos hexadecimales y binarios tambien son “number” y al mostrarlos en la consola son traducidos a su valor en decimal
  • : number no es lo mismo que : Number. Creo que cuando usamos la mayuscula se refiere al super prototipo Number

Tipazo:
Existe una extensión que se llama Error Lens, que te muestra los errores(en general) directamente en el código, esto incluye los de TS.

Recomendación de la documentación de TS:

Nunca uses:

  • Number
  • String
  • Boolean
  • Symbol
  • Object

Estos tipos de datos NO son primitivos, usa mejor.

  • number
  • string
  • boolean
  • symbol
  • object

Artículo en StackOverflow

Les comparto mis apuntes. 😄

Declaración de variables

En caso de simplemente declarar una variable y no asignarle un valor, estamos obligados a agregar el tipo de dato que es esa variable.

let productInStock: number;

NaN

Not A Number, entra dentro de la categoría de tipos de datos number.

Hexadecimal

Para usarlos, antes de asignar un número tenemos que colocar 0x y luego colocar valores entre el 0 y la f.

let hex: number = 0x0f124;

Binarios

Para usarlos, antes de asignar un número tenemos que colocar 0b y luego colocar 0 o 1.

let binariy: number = 0b00110101;

Octales

Para usarlos, antes de asignar un número tenemos que colocar 0o y luego colocar valores entre el 0 y el 7.

let octal: number = 0o0771234;

Al momento de compilar, en todos los casos, sea cual sea el valor que hayamos puesto va a ser convertido al valor decimal que corresponda.

(() => {
    //forma inferida
    let productPrice = 100;
    productPrice = 12;
    console.log('productPrice', productPrice);

    //forma explicita 
    let customerAge: number = 28;
    // forma erronea
    //customerAge = customerAge + '1'; //281
    //forma adecuada
    customerAge = customerAge + 1; //29
    console.log('customerAge', customerAge);

    //no quiero inicializar la variable, entonces por obligación la dejo de manera explicita 
    let productInStock: number;
    console.log('productInStock', productInStock);
    if(productInStock > 10){
        console.log('es mayor')
    }
    
    //lo convierten en INT si no lo lee dice NaN
    let discount = parseInt('100');
    console.log('discount', discount);
    if(discount <= 200){
        console.log('aplica')
    } else{
        console.log('No aplica')
    }


    //exadecimal y binarios

    let hex = 0xFFF;
    console.log('hex', hex);
    let bin = 0b10100000000000000000000001111110000000;
    console.log('bin', bin);

    //simepre en minuscula
    //X const myNumber: Number = 10;
    const myNumber: Number = 10;
})();

Recordar pues ome!

number !== Number

Aprendi demasiado en esta clase.

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.

number

  • Forma inferida
let productPrice = 100;
  • Forma explicita
let productPrice:number = 100;

Casos

  • 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”.

no me parece lógico que “NaN” sea tratado como number, si “NaN es -not a number-”, re-loco.

hexadecimales => 0xfff
binario => 0b121212

Muestra de errores

Si coloco el código del profe y ejecuto el comando node dist/04-numbers.ts me da una serie de errores, por lo que decidí quitarle el :number a las dos variables declaradas en el ejemplo. Con este cambio todo funciona bien.

  let customer_age: number = 28; 👈👀
  customer_age = customer_age + 1; // 29
	console.log('Customer age: ', customer_age);
	
	let product_stock: number; 👈👀
	console.log(product_stock);
╰─ node dist/04-numbers.ts
Price:  12
Customer age:  29
undefined
Discount:  123

✨ Estructura y orden 😊

Me encanta que todas las clases estén ordenadas/numeradas, esto debería ser un estándar, ya que hay profes que no le dan importancia a ser ordenados y escriben todo en un solo archivo, lo cual solo de ver eso desmotiva un poco.

Me estás diciendo que NaN (NOT A NUMBER) es un number
A veces programar es comedia

  // Do's and Don'ts de TS
  // Nunca usar String, Boolean, Number, Object, Symbol (se usan en JS), usar los tipos que recomienda TS, en este caso string, boolean, number, object, symbol

  // Si una variable no se va a asignar, se debe tipar siempre
  let customerAge: number;

  // Números: [int, float, octal: "0o0771234", hex: "0xfff", binary: "ob1010", NaN, Infinity]
  let productPrice: number = 100;

Profe, muchas gracias por enseñarme la manera de organizar mis clases. Lo de enumerar los archivos me parece genial.

No es necesario usar el comando npx:

npx tsc --watch

Para recortar el comando y tener su mismo resultado, es mas facil:

tsc --watch