Menu

Type Alias di TypeScript: Kata Kunci type dengan Contoh

Type alias memberi nama pada tipe apa pun dengan kata kunci type: bentuk object, union, tuple, fungsi, generic, dan tipe rekursif. Pelajari sintaksnya, rupa setiap bentuknya, dan kenapa alias hanyalah nama, bukan tipe baru yang terpisah.

Halaman ini dilengkapi editor yang bisa dijalankan. Edit, jalankan, dan lihat output-nya seketika.

Type alias memberi nama pada sebuah tipe. Kamu menulis type Name = ..., dan sejak itu Name bisa dipakai di mana pun tipe diharapkan. Tidak seperti interface, alias bisa menamai tipe apa saja, bukan hanya bentuk object.

Alias hanya ada saat kompilasi. JavaScript yang dihasilkan tidak memuat satu pun baris type ini.

Sintaks

type Name = SomeType;
type Name<T> = SomeTypeUsing<T>;       // generic
export type Name = SomeType;           // exported from a module

Menurut konvensi, namanya ditulis dalam PascalCase. Sisi kanannya adalah ekspresi tipe apa pun, dan sebuah alias bisa memakai alias lain, termasuk dirinya sendiri (lihat tipe rekursif di bawah). Alias tersedia di seluruh scope tempat ia dideklarasikan, bahkan di atas baris deklarasinya, karena tipe dicek saat kompilasi dan tidak dijalankan berurutan seperti const atau let.

Object Type

Untuk bentuk object, alias dan interface ditulis dengan cara yang hampir sama. Alias memakai = dan biasanya diakhiri titik koma.

Alias tidak bisa memakai extends; intersection & yang mengambil peran itu. Excess property check, property opsional, dan property readonly bekerja persis sama seperti pada interface. Mana yang dipilih di antara keduanya untuk bentuk object dibahas di halaman interface vs type.

Union, Tuple dan Fungsi

Inilah kasus yang hanya bisa dinamai oleh alias, dan alasan utama type ada. Alias union mendaftar alternatifnya, alias tuple menetapkan panjang dan tipe elemen sebuah array, dan alias fungsi menggambarkan sebuah signature.

Di scale, parameternya tidak butuh anotasi: alias Transform sudah menyediakan tipenya. Sintaks tuple dibahas di tuple, dan narrowing union di halaman union types.

Type Alias Generic

Type parameter membuat satu alias berlaku untuk banyak tipe. Parameter ini bisa punya nilai default, sama seperti parameter fungsi.

Result<number> memakai default E = string. Alias generic kecil seperti type Nullable<T> = T | null atau type Dict<T> = Record<string, T> umum dipakai dalam kode nyata. Utility type bawaan (Partial<T>, Pick<T, K>, ReturnType<F>) juga merupakan alias generic, yang dideklarasikan di standard library.

Alias adalah Nama, Bukan Tipe Baru

Alias tidak membuat tipe yang berbeda. Ia adalah nama kedua untuk tipe di sisi kanan, dan compiler memperlakukan keduanya sebagai identik. Dua alias dari string bisa saling menggantikan sepenuhnya:

Ini mencetak cancelling u_42 tanpa error, dan itulah bug yang tidak bisa dicegah oleh alias. Alias tetap membantu pembaca (parameter bertipe OrderId memberi lebih banyak informasi daripada string), tetapi kalau tertukarnya dua id harus menjadi error kompilasi, pakai branded type seperti string & { readonly __brand: "OrderId" }.

Type Alias Rekursif

Sebuah alias bisa merujuk ke dirinya sendiri, dan begitulah cara menggambarkan tree, list bersarang, dan JSON:

Alias Json menolak nilai yang tidak bisa direpresentasikan JSON: { when: new Date() } atau { f: undefined } yang di-assign ke Json adalah error kompilasi (TS2322).

Tipe dari Nilai: typeof

Kalau sebuah nilai sudah ada, kamu bisa menamai tipenya alih-alih menuliskannya. Operator tipe typeof membaca tipe sebuah variabel, dan bisa digabung dengan operator lain:

const defaults = { retries: 3, verbose: false, level: "info" };

type Options = typeof defaults;
// { retries: number; verbose: boolean; level: string }

type OptionKey = keyof typeof defaults;
// "retries" | "verbose" | "level"

function start(port: number) {
  return { port, startedAt: new Date() };
}
type Server = ReturnType<typeof start>;
// { port: number; startedAt: Date }

Nilainya tetap menjadi satu-satunya sumber kebenaran: tambahkan property ke defaults dan Options ikut berubah. Penjelasan lebih lanjut ada di typeof.

Export dan Import Alias

Alias di-export dan di-import seperti nilai. import type menegaskan bahwa yang di-import hanya tipe, sehingga import itu selalu dihapus dari output JavaScript:

// shapes.ts
export type Point = { x: number; y: number };
export type Shape = { kind: "circle"; center: Point; radius: number };

// main.ts
import type { Point, Shape } from "./shapes.js";

const p: Point = { x: 1, y: 2 };

Pertanyaan yang sering diajukan

Apa itu type alias di TypeScript?

Type alias adalah nama untuk sebuah tipe, dideklarasikan dengan kata kunci type: type Point = { x: number; y: number }. Setelah itu, Point bisa dipakai di mana pun tipe diharapkan. Alias bisa menamai tipe apa saja: bentuk object, union, tuple, signature fungsi, primitif, atau tipe generic.

Apakah type alias membuat tipe baru?

Tidak. Alias hanyalah nama lain untuk tipe yang sudah ada. Dengan type UserId = string dan type OrderId = string, sebuah UserId bisa dikirim ke tempat yang mengharapkan OrderId, karena keduanya hanyalah string. Untuk membuat tipe yang tidak bisa saling menggantikan, pakai branded type.

Bisakah type alias merujuk ke dirinya sendiri?

Bisa, selama rujukan ke dirinya sendiri itu berada di dalam object type, array, atau tuple: type TreeNode = { value: number; children: TreeNode[] } dan alias Json yang memuat Json[] sama-sama berfungsi. Rujukan langsung seperti type Loop = Loop | string adalah error TS2456, Type alias 'Loop' circularly references itself.

Bisakah type alias bersifat generic?

Bisa. Taruh type parameter setelah namanya: type Box<T> = { value: T }, lalu pakai sebagai Box<number>. Parameter bisa punya nilai default (type Result<T, E = string> = ...) dan constraint (type Keys<T extends object> = keyof T).

Bagaimana cara mendapatkan tipe dari object yang sudah ada?

Pakai operator tipe typeof: const defaults = { retries: 3, verbose: false }; type Options = typeof defaults; menghasilkan { retries: number; verbose: boolean }. Cara ini menjaga satu sumber kebenaran kalau nilainya ada lebih dulu.

Ilustrasi bahasa pemrograman di Coddy

Belajar coding dengan Coddy

Mulai