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 鈥淔1鈥 y eliges 鈥淨uokka: start on current file鈥 es todo.

Resumen de la clase:

  • NaN tambien aplica como tipo de dato 鈥渘umber鈥
  • Datos hexadecimales y binarios tambien son 鈥渘umber鈥 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 鈥淣umber鈥 si no con 鈥渘umber鈥.

no me parece l贸gico que 鈥淣aN鈥 sea tratado como number, si 鈥淣aN 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