Typealias: apa itu, sintaksis dan penerapannya

Penulis: IT Sectr Diterbitkan: 2026-06-20 Waktu membaca: 7 mnt

Typealias — deklarasi di Swift yang membuat nama alternatif untuk tipe yang ada tanpa mendefinisikan yang baru. Alias sepenuhnya setara dengan tipe asli pada fase kompilasi — kompiler mengganti tipe asli di mana pun typealias digunakan. Menurut Swift Language Guide (2025), typealias digunakan untuk memperpendek tanda tangan panjang, mengabstraksi tipe internal melalui associatedtype dalam protokol dan menyederhanakan parameter generik yang kompleks. Berbeda dengan pembungkus tipe (wrapper), typealias tidak menambah keamanan tipe — ini hanya alias yang tidak dibedakan oleh sistem tipe.

Poin utama

  • Typealias — alias dari tipe yang ada, tidak membuat tipe baru; kompiler menggantinya dengan asli
  • Sintaksis: typealias NewName = ExistingType — dapat dideklarasikan di tingkat mana pun (global, lokal, di dalam tipe)
  • Associatedtype — typealias di dalam protokol, mendefinisikan tipe terkait yang dikonkretkan saat protokol dikonfirmasi
  • Tanda tangan generik — typealias memperpendek parameter panjang: typealias Result = Swift.Result<Data, Error>
  • Tipe closure — typealias meningkatkan keterbacaan: typealias Handler = (Int) -> Void

Apa itu Typealias?

Typealias — adalah deklarasi di Swift yang memperkenalkan nama alternatif untuk tipe yang ada. Setelah typealias dideklarasikan, nama baru dapat digunakan di mana pun tipe asli diharapkan — kompiler memperlakukannya sebagai identik. Typealias tidak menambah isolasi semantik: nilai tipe UserID (typealias untuk String) dapat diteruskan ke fungsi yang mengharapkan String tanpa kesalahan.

Tujuan utama typealias — memperpendek nama panjang, mendokumentasikan tujuan tipe dan mengabstraksi implementasi konkret. Misalnya typealias JSON = [String: Any] secara eksplisit menunjukkan bahwa kamus digunakan sebagai struktur JSON, dan typealias Completion = (Result<Data, Error>) -> Void mengubah tanda tangan closure yang kompleks menjadi tipe yang mudah dibaca.

Menurut Swift.org (2025), typealias banyak digunakan di perpustakaan standar. Misalnya String — adalah typealias untuk String (Array<Character> khusus), meskipun dalam versi Swift modern implementasi ini disembunyikan. Void — typealias untuk tuple kosong (), yang membuat tanda tangan fungsi lebih terbaca.

Gunakan typealias untuk mendokumentasikan semantik tipe, tetapi ingat: ini tidak melindungi dari pencampuran konsep yang berbeda dari tipe dasar yang sama. Untuk pemisahan tipe yang aman, gunakan pembungkus (struct wrapper).

Sintaksis dan ruang lingkup visibilitas

Typealias dideklarasikan dengan kata kunci typealias, diikuti oleh nama baru, tanda sama dengan dan tipe yang ada. Bentuk dasar:

swift
typealias Name = ExistingType
typealias UserID = Int
typealias JSONDictionary = [String: Any]

Ruang lingkup visibilitas typealias ditentukan oleh tempat deklarasi:

TingkatContohVisibilitas
Globaltypealias Name = StringSeluruh modul (dengan mempertimbangkan access control)
Di dalam tipestruct User { typealias ID = Int }User.ID — akses melalui tipe
Di dalam fungsifunc f() { typealias Local = Int }Hanya di dalam fungsi
Di dalam protokolprotocol P { associatedtype T }Ditentukan saat konfirmasi

Typealias di dalam tipe (misalnya User.ID) — pola umum untuk mengelompokkan alias terkait. Ini meningkatkan ruang nama: Order.ID dan User.ID — keduanya Int, tetapi dibaca sebagai konsep yang berbeda. Akses ke typealias bersarang dilakukan melalui User.ID atau melalui titik jika tipenya diketahui.

Typealias untuk tipe closure

Salah satu penggunaan typealias yang paling umum — menyederhanakan tanda tangan closure. Tipe closure di Swift bisa rumit, terutama dengan Optional dan parameter generik. Typealias mengubah (Data?, Error?) -> Void menjadi FetchResultHandler yang mudah dibaca:

swift
typealias FetchResultHandler = (Data?, Error?) -> Void

func fetchUser(id: Int, completion: FetchResultHandler) {
    // permintaan jaringan
    completion(data, nil)
}

Menurut Ray Wenderlich Style Guide, typealias untuk closure meningkatkan keterbacaan tanda tangan metode, terutama dalam protokol delegasi dan pola callback. Namun hindari jumlah alias yang berlebihan — jika closure digunakan di satu tempat, dapat dideklarasikan secara inline.

Perpustakaan standar Swift secara aktif menggunakan teknik ini. Misalnya DispatchQueue.WorkItem — adalah typealias untuk DispatchWorkItem, meskipun dari luar terlihat seperti tipe terpisah. Typealias untuk closure adalah alat keterbacaan, jangan menyalahgunakannya: 3–5 alias closure per modul — batas yang wajar.

Typealias dan parameter generik

Typealias dapat menyertakan parameter generik, menciptakan versi khusus dari tipe yang digeneralisasi. Ini sangat berguna saat bekerja dengan Result, Publisher dan tipe generik lainnya dari perpustakaan standar dan Combine:

swift
typealias FetchResult = Result<Data, Error>
typealias AnyPublisherOfData = AnyPublisher<Data, Error>

func loadData() -> FetchResult {
    // memuat data
}

Juga dapat membuat typealias dengan parameter generik sendiri yang diarahkan ke tipe asli:

swift
typealias NetworkResult<T> = Result<T, NetworkError>

func fetchUser() -> NetworkResult<User> {
    // ...
}

Aturan penting: typealias tidak dapat menambahkan batasan generik baru (where clauses) — hanya mengarahkan parameter ke tipe asli. Jika batasan tambahan diperlukan, buat struktur generik atau kelas. Menurut Swift by Sundell (2024), typealias dengan generic — cara ideal untuk memperpendek tanda tangan berulang dalam proyek yang secara aktif menggunakan Combine, Result dan async/await.

Associatedtype dalam protokol

Associatedtype — adalah typealias yang dideklarasikan di dalam protokol, yang mendefinisikan tipe terkait. Berbeda dengan typealias biasa, associatedtype tidak terikat pada tipe tertentu pada fase deklarasi — ia dikonkretkan oleh setiap tipe yang mengonfirmasi protokol:

swift
protocol Container {
    associatedtype Item
    var count: Int { get }
    mutating func append(_ item: Item)
}

struct IntBox: Container {
    typealias Item = Int
    // implementasi
}

struct StringBox: Container {
    typealias Item = String
    // implementasi
}

Associatedtype memberikan protokol fleksibilitas tipe generik tanpa menentukan tipe konkret di tempat deklarasi. Ini adalah dasar dari banyak pola Swift: Collection (Element), IteratorProtocol (Element), Identifiable (ID). Kompiler dapat menyimpulkan associatedtype secara otomatis dari implementasi, oleh karena itu typealias Item = Int eksplisit sering dihilangkan — Swift menyimpulkan Item sebagai Int dari parameter metode append.

Menurut Swift Evolution SE-0195 (2022), opaque result types (some Container) diperkenalkan untuk bekerja dengan protokol yang mengandung associatedtype — ini memecahkan masalah PAT (protocol with associated types), yang tidak dapat digunakan sebagai tipe variabel.

Typealias vs pembungkus tipe

Perbedaan utama: typealias — hanya nama lain untuk tipe yang ada, dan pembungkus (wrapper) — tipe baru, secara semantik terisolasi dari aslinya. Jika Anda mendeklarasikan typealias UserID = Int, maka UserID dan Int dapat dipertukarkan — fungsi yang mengharapkan Int akan menerima UserID tanpa kesalahan.

Pembungkus dibuat melalui struct dan memberikan keamanan tipe yang nyata:

swift
struct UserID: RawRepresentable {
    let rawValue: Int
}

struct OrderID: RawRepresentable {
    let rawValue: Int
}

// Kesalahan kompilasi: tidak dapat meneruskan OrderID di mana UserID diharapkan

Menurut Point-Free (2025), pembungkus lebih disukai ketika konsep yang berbeda diwakili oleh satu tipe dasar (UserID vs OrderID). Typealias dibenarkan ketika tujuannya adalah keterbacaan tanpa isolasi: memperpendek nama panjang, mendokumentasikan semantik, mengabstraksi implementasi melalui associatedtype. Pilih typealias untuk kenyamanan membaca, pembungkus — untuk keamanan tipe.

Pertanyaan yang sering diajukan

Apa perbedaan typealias dengan associatedtype?

Typealias — alias untuk tipe yang ada secara spesifik. Associatedtype dideklarasikan di dalam protokol dan dikonkretkan oleh setiap tipe yang mengonfirmasi protokol — tipe yang berbeda dapat menggunakan associatedtype yang berbeda untuk protokol yang sama.

Apakah typealias membuat tipe baru?

Tidak, typealias — hanya nama alternatif. Kompiler menggantinya dengan tipe asli pada fase kompilasi. Untuk membuat tipe baru yang terisolasi secara semantik, gunakan pembungkus struct atau enum dengan rawValue.

Bisakah typealias digunakan dengan parameter generik?

Ya, typealias dapat menyertakan parameter generik: typealias Result<T> = Swift.Result<T, Error>. Parameter generik diarahkan ke tipe asli. Batasan where tidak dapat ditambahkan — untuk ini gunakan struktur generik.

Di mana typealias dapat dideklarasikan?

Di tingkat mana pun: global (dalam file), di dalam tipe (struct/class/enum), di dalam fungsi, di dalam protokol (sebagai associatedtype). Ruang lingkup visibilitas ditentukan oleh tempat deklarasi — typealias global terlihat di seluruh modul, lokal — hanya dalam ruang lingkupnya sendiri.

Kapan harus menggunakan typealias daripada pembungkus?

Pilih typealias untuk memperpendek nama panjang dan mendokumentasikan semantik, ketika pertukaran dengan tipe asli aman. Pembungkus (struct) — ketika perlu mencegah pencampuran tidak sengaja konsep yang berbeda dari tipe dasar yang sama: UserID vs ProductID.

Ringkasan

  • Typealias — alias dari tipe yang ada tanpa membuat tipe baru; kompiler menggantinya dengan asli
  • Sintaksis: typealias NewName = ExistingType, ruang lingkup visibilitas — global, di dalam tipe, di dalam fungsi
  • Tipe closure — typealias menyederhanakan tanda tangan: typealias Handler = (Int) -> Void
  • Generic — typealias dapat menyertakan parameter generik untuk memperpendek Result, Publisher dan tipe yang digeneralisasi lainnya
  • Associatedtype — typealias di dalam protokol, dikonkretkan oleh setiap tipe yang mengonfirmasi
  • Perbedaan dengan pembungkus: typealias tidak mengisolasi tipe — UserID dan Int dapat dipertukarkan; pembungkus (struct) memberikan keamanan tipe nyata
  • Praktik terbaik: gunakan typealias untuk keterbacaan, pembungkus — untuk mencegah kesalahan semantik kompilasi

Kami akan mengembangkan aplikasi seluler turnkey

IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.

Diskusikan proyek

Baca juga