typedef (alias de tipo)

Definição

Função: A palavra-chave typedef cria nomes curtos para tipos existentes, chamados também de alias de tipo. O Dart 2.13 passou a suportar todos os tipos; versões antigas aceitavam apenas tipos de função.

Sintaxe: typedef Apelido = TipoOriginal;

Exemplo: typedef IntList = List<int>;. Após essa declaração, você pode usar IntList no lugar de List<int> em qualquer trecho de código.

typedef IntList = List<int>;
IntList il = [1, 2, 3];Code language: Dart (dart)

Suporte a parâmetros genéricos

Alias de tipo aceitam genéricos para simplificar tipos compostos complexos:

typedef ListMapper<X> = Map<X, List<X>>;Code language: Dart (dart)

ListMapper<String> é idêntico ao Map<String, List<String>>, deixando o código mais compacto e legível.

typedef ListMapper<X> = Map<X, List<X>>;
Map<String, List<String>> m1 = {}; // Forma longa e verbosa
ListMapper<String> m2 = {}; // Mesmo tipo, mais curto e compreensívelCode language: Dart (dart)

Alias de tipo para funções

Você pode criar um alias para uma assinatura de função, padronizando o formato das funções no código:

typedef Compare<T> = int Function(T a, T b);Code language: Dart (dart)

Toda função que segue a assinatura (T, T) → int é do tipo Compare<T>. Use o operador is para verificar se o tipo corresponde.

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

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

void main() {
  assert(sort is Compare<int>); // Retorna verdadeiro
}
Code language: Dart (dart)

Exemplos práticos

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

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

  print(nums);
  print(info);
}Code language: JavaScript (javascript)
// Alias genérico: chave X, valor é lista do tipo X
typedef ListMapper<X> = Map<X, List<X>>;

void main() {
  // Forma nativa longa
  Map<String, List<String>> oldData = {
    "fruit": ["apple", "banana"]
  };

  // Forma simplificada com typedef, tipos equivalentes
  ListMapper<String> newData = {
    "fruit": ["apple", "banana"]
  };

  print(oldData);
  print(newData);
}Code language: Dart (dart)
// Alias de função genérico: recebe dois parâmetros T, retorna inteiro
typedef Compare<T> = int Function(T a, T b);

// Função compatível com Compare<int>
int intSort(int a, int b) => a - b;
// Função compatível com Compare<String>
int strSort(String a, String b) => a.length - b.length;

void main() {
  // Validação de tipos
  assert(intSort is Compare<int>);
  assert(strSort is Compare<String>);

  // Passar a função como argumento
  List<int> arr = [5, 1, 3];
  arr.sort(intSort);
  print(arr); // Saída: [1, 3, 5]
}Code language: Dart (dart)

typedef (alias de tipo)

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *