No tienes acceso a esta clase

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

Generics

21/25
Recursos

Aportes 22

Preguntas 3

Ordenar por:

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

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

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

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 “Tipo(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 “elementos” en una colección.

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

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 “T” 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 “plantilla” 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 “any”.

En general, en todos los lenguajes de lenguaje de tipado estático como C# se utiliza la T como un genérico (T, U, V...). Aunque he visto que a veces suelen utilizar la E, K, N o V si tienes Elementos, Llaves, Números o Valores...creo que es cuestión de gustos.