typedef (alias de tipo)

Definición

Propósito: typedef sirve para crear nombres cortos para tipos ya existentes, también llamados alias de tipo. Dart 2.13 incorporó soporte completo para todo tipo de datos; las versiones anteriores solo admitían tipos de función.

Sintaxis: typedef Alias = TipoOriginal;

Ejemplo: typedef IntList = List<int>;. Después de declararlo, puedes usar IntList directamente en lugar de escribir List<int>.

typedef IntList = List<int>;
IntList il = [1, 2, 3];Lenguaje del código: Dart (dart)

Compatibilidad con parámetros genéricos

Los alias de tipo pueden llevar genéricos para simplificar tipos compuestos complejos:

typedef ListMapper<X> = Map<X, List<X>>;Lenguaje del código: Dart (dart)

ListMapper<String> es equivalente a Map<String, List<String>>, logrando un código más limpio y fácil de leer.

typedef ListMapper<X> = Map<X, List<X>>;
Map<String, List<String>> m1 = {}; // Escritura larga y repetitiva
ListMapper<String> m2 = {}; // Mismo tipo, más corto y claroLenguaje del código: Dart (dart)

Alias de tipo para funciones

Es posible definir alias para firmas de función, unificando el formato de todas las funciones del proyecto:

typedef Compare<T> = int Function(T a, T b);Lenguaje del código: Dart (dart)

Cualquier función que cumpla la firma (T, T) → int pertenece al tipo Compare<T>. Usa el operador is para comprobar la coincidencia de tipos.

typedef Compare<T> = int Function(T a, T b);

int sort(int a, int b) => a - b;

void main() {
  assert(sort is Compare<int>); // El resultado es verdadero
}
Lenguaje del código: Dart (dart)

Ejemplos prácticos

// Definir alias de tipo
typedef IntList = List<int>;
typedef StringMap = Map<String, dynamic>;

void main() {
  // Usar el alias directamente
  IntList nums = [10, 20, 30];
  StringMap info = {"name": "dart", "version": "2.18"};

  print(nums);
  print(info);
}Lenguaje del código: JavaScript (javascript)
// Alias genérico: clave X, valor lista de tipo X
typedef ListMapper<X> = Map<X, List<X>>;

void main() {
  // Formato nativo extenso
  Map<String, List<String>> oldData = {
    "fruit": ["apple", "banana"]
  };

  // Formato abreviado con typedef, tipos idénticos
  ListMapper<String> newData = {
    "fruit": ["apple", "banana"]
  };

  print(oldData);
  print(newData);
}Lenguaje del código: Dart (dart)
// Alias de función genérico: recibe dos valores T, retorna entero
typedef Compare<T> = int Function(T a, T b);

// Función compatible con Compare<int>
int intSort(int a, int b) => a - b;
// Función compatible con Compare<String>
int strSort(String a, String b) => a.length - b.length;

void main() {
  // Comprobación de tipos
  assert(intSort is Compare<int>);
  assert(strSort is Compare<String>);

  // Pasar la función como parámetro
  List<int> arr = [5, 1, 3];
  arr.sort(intSort);
  print(arr); // Salida: [1, 3, 5]
}Lenguaje del código: Dart (dart)

typedef (alias de tipo)

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *