No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Generics

21/25
Recursos

Aportes 21

Preguntas 3

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

Por convenci贸n, se utiliza el nombre " T " para dar a conocer que es un generics, es muy com煤n ver este tipo de nombre en otros repositorios, documentaci贸n y tambi茅n es usado en otros lenguajes como java y C#.
Otros nombres utilizados en los generics son:

  • E - Elemento (elementos en una colecci贸n)
  • K - Llave
  • N - N煤mero
  • V - Valor

Esta lectura de aqu铆 me ayudo mucho a entender sobre los generics :3

Generics

Podemos enviar tipado como par谩metro:

import { Dog } from "./8-herencia";

function getValue<T>(value: T) { //*Usar T es una convenci贸n para tus propios tipados
  return value;
}

getValue<number>(12).toFixed()
getValue<string>('12').length
getValue<boolean>(true).toString()

const doggy = new Dog('doggy', 'Snoop dog')
getValue<Dog>(doggy)

Es convencional usar camelCase para variables y nombres de m茅todos, UpperCamelCase para nombres de clases y UPPER_SNAKE_CASE para constantes; y es convencional usar T para un par谩metro de tipo generics

Este tema lo toque con Java hace 4 a帽os y es la primera ves que entiendo su uso, deje Java hace tiempo pero es una espina que recien puedo sacar.

// Otro ejemplo de uso gen茅ricos

class Generica<T> {
  // Se define una propiedad de tipo funci贸n generica
  suma?: (x: T, y: T) => T;
}

// Se instancia y se le da la funcionalidad
let instanciaArray = new Generica<(string | number)[]>();
instanciaArray.suma = function(x, y) {
  return [...x, ...y];
}

let variableArray = instanciaArray.suma(['a','b','c'] , ['1','2','3']);
console.log(variableArray);

Resultado:

[ 'a', 'b', 'c', '1', '2', '3' ]

Generics

Es una forma de delegar el tipado para pasarlo como argumento. Es decir, al momento de declarar la funci贸n se le coloca como parametro

import { Dog } from "./09-protected";

// Aqui lo declaramos como parametro
function getValue<T>(value: T) {
  return value;
}

// Aqui lo pasamos como argumento
getValue<number>(777).toFixed();
getValue<string>('loqsea');
getValue<number[]>([1, 2, 3, 4, 5, 6, 7]).forEach((item) => item + 1);

const max = new Dog('Max', 'Antony')
getValue<Dog>(max)

La ventaja que tiene es la flexibilidad de tener diferentes tipos de datos en un mismo m茅todo, sin necesidad de ponerlos uno a uno al momento de declarar la funci贸n

Porqu茅 la T en generics?

Lo m谩s probable es que la letra predeterminada a usar sea T porque significa 鈥淭ipo(Type en Ingl茅s)鈥, entonces, al igual que en matem谩ticas, es convencional usar letras consecutivas para m煤ltiples variables que representan el mismo tipo de cosas, por lo que S, T, U, V son comunes. Adem谩s:

  • K se usa a menudo para un tipo de clave gen茅rica
  • V para un tipo de valor asociado.
  • en algunos casos, E se usa para el tipo de 鈥渆lementos鈥 en una colecci贸n.

Fuente: https://stackoverflow.com/questions/68458146/why-do-we-use-the-letters-t-u-in-generics

El nombre T viene desde los genericos de JAVA, no por TS

realmente ya habia visto este tema en otro videos, pero hasta este video le entendi correctamente

El uso de la letra "T" en los m茅todos gen茅ricos, como en TypeScript (TS) o C#, es una convenci贸n com煤nmente utilizada para representar un par谩metro de tipo gen茅rico. La "T" se utiliza como un marcador o s铆mbolo que representa un tipo desconocido o no espec铆fico que ser谩 determinado en tiempo de compilaci贸n o en el momento de uso del m茅todo. La elecci贸n de la letra "T" es simplemente una convenci贸n y no est谩 relacionada con una caracter铆stica o funci贸n espec铆fica de los lenguajes de programaci贸n. Se eligi贸 "T" debido a su proximidad en el alfabeto a las letras utilizadas para otros tipos gen茅ricos, como "K" y "V" para clave y valor, respectivamente. El uso de "T" facilita la legibilidad y comprensi贸n del c贸digo, ya que se ha convertido en una pr谩ctica com煤n y ampliamente reconocida en la comunidad de programadores. Sin embargo, es importante destacar que la elecci贸n de la letra "T" es arbitraria y se podr铆a utilizar cualquier otra letra o incluso palabras m谩s descriptivas seg煤n la convenci贸n establecida en cada lenguaje de programaci贸n en particular.

La 鈥淭鈥 viene de Template ya que estos en ingles se conocen como Generic Templates

Los par谩metros de tipado tambi茅n puede ser opcionales:

function getValue<T, U = unknown>(value: T, value2?: U) {
	return { value, value2 };
}

const fifi = new Dog("fifi");

getValue<Dog>(fifi);
intersante
incre铆ble estas funcionalidades para los typados me gusto mucho

Desde Java tenia la duda del tipado < > no comprendia para que funcionaba, ahora comprendo que es.

por ser TypeScript de Microsoft, la expresi贸n com煤n T, viene del concepto de generic .NET, se usaba antes que saliera TypeScript. por ejemplo aqu铆 en net standard 2.1 es comun: [System.Collections.Generic Namespace | Microsoft Learn](https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic?view=netstandard-2.1)

Recomiendo leer esto. Corto, simple y te hace entender muy r谩pido para que sirven los generics: aqui

Un poco de humor

驴T de Troy?

Podemos entender los gen茅ricos como una especie de 鈥減lantilla鈥 de c贸digo, mediante la cual podemos aplicar un tipo de datos determinado a varios puntos de nuestro c贸digo. Sirven para aprovechar c贸digo, sin tener que duplicarlo por causa de cambios de tipo y evitando la necesidad de usar el tipo 鈥渁ny鈥.