No tienes acceso a esta clase

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

Tipos inferidos

8/24
Recursos

TypeScript puede inferir el tipo de dato de una variable a pesar de no haberlo declarado explícitamente.

Inferencia de tipos

A partir de la inicialización de la variable TypeScript infiere el tipo que será a lo largo del código y este no puede variar. Por ejemplo:

let myName = "Victoria";

Si bien no indicamos el tipo de dato como se haría de esta manera:

let myName: string = "Victoria";

TypeScript infiere que la variable myName será del tipo string y en adelante no podrá tomar un valor que no sea de este tipo de dato.

myName = 30; 
//Nos señalará como error pues se le quiere asignar un número a una variable de tipo string.

En Visual Studio Code puedes obtener autocompletado teniendo sugerencias según el tipo de dato que sea la variable:
Autocompletado en Visual Studio Code

Nombres de variables iguales

TypeScript te indicará como error aquellas variables con el mismo nombre a pesar de estar en archivos distintos. Esto no sucederá en entornos preconfigurados como por ejemplo Angular o React, ya que estos trabajan de forma modular o tienen un alcance (scope) para cada variable.

Si deseas trabajar con los mismos nombres de variables en diferentes archivos, puedes crear una función anónima autoejecutada:

( () => {
    let myName = "Victoria";
})();

Lo mismo por cada variable que desees tener el mismo nombre (myName para este ejemplo) deberás crear este tipo de función para evitar que te den estas advertencias.

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

Aportes 18

Preguntas 3

Ordenar por:

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

o inicia sesión.

En el anterior curso 2020 de TS el profesor expostaba un objeto vacio para poder quitar los errores del editor:

export {}

Sin embargo, nunca entendí bien el porqué, aunque tenga más líneas de código, creo que es mejor practica la que se ve en esta clase.

Inmediately Invoked Function Expression (IIFE).

También se pueden usar para simular un ‘top level await’:

(async () => { 
	...
	const students = await window.fetch(...)
	...
})() 

De esta clase podemos concluir:

  • TS usa tipos inferidos para “asignar” tipos de datos a variables sin que se las tengamos que asignar de manera explicita
  • Entre los beneficios de usar TS esta el hecho de que tenemos los metodos usados a cada tipo de datos, como en el caso de una variable “string”, podemos acceder a el método toLowerCase de manera mas rápida
  • Al no tener aun modularizacion, TS nos alerta de que ciertas variables ya han sido declaradas, esto lo podemos prevenir con funciones anónimas autoejecutadas

Les recomiendo la extensión Error Lens en VSCode.
Te permite ver los errores en tiempo real y te indica en la misma línea, en donde tenés el error y la descripción del mismo.
Ejemplo:

una función anónima auto-ejecutada :

(( ) => {

}) ( );

No hay ninguna ventaja de utilizar un arrow function en un **IIFE **(Immediately Invoke Function Expression) por lo cual usar una funcion normal me parece mas correcto

(function() {

})()

Les comparto mis apuntes. 😄

Tipo de dato inferido

Sin necesidad de especificar el tipo de dato, TypeScript supone o deduce el mismo con el valor que le asignamos a la variable.

Es recomendable usarlo por encima del tipo de dato explico cada vez que sea posible.

Variables (let y var)

En TypeScript nos dice el tipo de dato que tienen que recibir estás variables, ya que como son variables pueden solamente cambiar a lo largo del programa pero solo por ese tipo de dato.

Constantes (const)

Aquí TypeScript no nos dice tipo de dato de nuestra constante, porque como su nombre lo indica, la misma no puede cambiar a lo largo del programa por otro valor.

Funciones anónimas autoejecutable

((parameters) => {
		statements
})();

Ese Tipo de función es llamado Función IFEE (Immediately-invoked function expressions y este tipo de función se manda a llamar por si sola. Se puede escribir como arrow function o function declaration

(() => {
  
})()
(function() {
  
})()

Les comparto otras formas de crear funciones anónimas auto-ejecutables

Forma clásica:

(function(){
  console.log('Versión clásica');
})();

Con arrow function:

(()=>{
  console.log('Versión arrow function')
})();

Crockford --> Creador de JSON:

((function(){
  console.log('Versión Crockford');
})());

Forma Unaria:

+function(){
  console.log('Forma unaria');
}();

Algo curioso que noté, o que percibo, es que la inferencia de tipo, cuando se declara un valor let, Typescript te advierte del cambio, no tanto de tipo, sino de valor, como si quisiese tratarlo como constante de cierta forma.

También es curioso que al declarar constantes, el editor no te sugiere el tipo asignado en el tooltip.

muy interesante, siempre escuchaba sobre TS pero no habia tenido la oportunidad ni la necesidad de usarlo, pues definitivamente me esta gustando TS…

Immediate-Invoked Function Expression (()=>{})()

Y yo que no entendia porque seguia tirandome errores, hasta que conoci las funciones anonimas autoejecutadas

TIPADO INFERIDO: Typescript deduce el tipado por default, es decir que si no colocamos el tipado tipescript lo hace por nosotros a través de su motor de inferencia.

Esas funciones se les conoce como IIFE (Immediately Invoked Function Expression)
Acá te dejo la documentaciòn

a example :3

let myProductName = 'producto'; // tipo inferido (ya es una variable de strings)

let myProductPrice = 12; // tipo inferido (ya es una variable de tipo number)

 myProductName = 2; // ERROR! NO SE PUEDE ASIGNAR UN NUMERO A UNA VARIABLE DE TIPO STRING

myProductName = 'cambio'; // BIEN :)

 myProductPrice = 'hola'; // ERROR! NO SE SE LE PUEDE ASIGNAR UN STRING A UNA VARIABLE DE TIPO NUMBER

myProductPrice = 22; // BIEN :)
//* Función anónima autoejecutada

(() => {
  let myProductName = 'Product 1'
  let myProductPrice = 123

  //!myProductName = 123 no podemos hacer esto
  myProductName = 'change'
  myProductName.toUpperCase()

  myProductPrice.toString()

  const myProductStock = 1000
  //! myProductStock = 2000; no podemos hacerlo porque es una constante

})();

//* Hacemos esto para poder usar los mismos nombres de variables en otros archivos de TS.