Definisi
Fungsi: Kata kunci typedef digunakan untuk membuat nama singkat bagi tipe data yang sudah ada, yang dikenal juga sebagai alias tipe. Dart versi 2.13 ke atas mendukung semua jenis tipe secara penuh; versi lama hanya bisa dipakai untuk tipe fungsi.
Sintaks: typedef Alias = TipeAsli;
Contoh: typedef IntList = List<int>;. Setelah dideklarasikan, kamu bisa langsung pakai IntList tanpa perlu tulis List<int>.
typedef IntList = List<int>;
IntList il = [1, 2, 3];Code language: Dart (dart)
Dukungan parameter generik
Alias tipe bisa menggunakan generik untuk menyederhanakan tipe gabungan yang rumit:
typedef ListMapper<X> = Map<X, List<X>>;Code language: Dart (dart)
ListMapper<String> sama persis dengan Map<String, List<String>>, kode jadi lebih ringkas dan mudah dibaca.
typedef ListMapper<X> = Map<X, List<X>>;
Map<String, List<String>> m1 = {}; // Penulisan standar yang panjang
ListMapper<String> m2 = {}; // Tipe sama, lebih pendek dan jelasCode language: Dart (dart)
Alias tipe fungsi
Kamu bisa membuat alias untuk signature fungsi agar format fungsi di seluruh kode menjadi seragam:
typedef Compare<T> = int Function(T a, T b);Code language: Dart (dart)
Semua fungsi dengan signature (T, T) → int termasuk tipe Compare<T>. Gunakan operator is untuk mengecek kecocokan tipe.
typedef Compare<T> = int Function(T a, T b);
int sort(int a, int b) => a - b;
void main() {
assert(sort is Compare<int>); // Hasil pengecekan bernilai true
}
Code language: Dart (dart)
Contoh penggunaan nyata
// Deklarasikan alias tipe
typedef IntList = List<int>;
typedef StringMap = Map<String, dynamic>;
void main() {
// Pakai alias secara langsung
IntList nums = [10, 20, 30];
StringMap info = {"name": "dart", "version": "2.18"};
print(nums);
print(info);
}Code language: JavaScript (javascript)

// Alias generik: kunci tipe X, nilai berupa daftar tipe X
typedef ListMapper<X> = Map<X, List<X>>;
void main() {
// Penulisan asli yang panjang
Map<String, List<String>> oldData = {
"fruit": ["apple", "banana"]
};
// Penulisan singkat pakai typedef, tipe sama persis
ListMapper<String> newData = {
"fruit": ["apple", "banana"]
};
print(oldData);
print(newData);
}Code language: Dart (dart)

// Alias fungsi generik: terima dua parameter T, kembalikan bilangan bulat
typedef Compare<T> = int Function(T a, T b);
// Fungsi yang cocok dengan Compare<int>
int intSort(int a, int b) => a - b;
// Fungsi yang cocok dengan Compare<String>
int strSort(String a, String b) => a.length - b.length;
void main() {
// Validasi tipe saat program berjalan
assert(intSort is Compare<int>);
assert(strSort is Compare<String>);
// Gunakan fungsi sebagai argumen
List<int> arr = [5, 1, 3];
arr.sort(intSort);
print(arr); // Keluaran: [1, 3, 5]
}Code language: Dart (dart)

typedef (alias tipe)