Intersection Types & keyof — TypeScript

Intersection type (&) menggabungkan beberapa type menjadi satu — objek harus memiliki semua property dari semua type. type HasName = { nama: string } type HasAg

Intersection type (&) menggabungkan beberapa type menjadi satu — objek harus memiliki semua property dari semua type.

type HasName = { nama: string }
type HasAge  = { umur: number }
type Person  = HasName & HasAge
// Person harus punya: nama DAN umur

Union vs Intersection:


keyof — mengambil semua nama property dari sebuah type sebagai union:

type User = { nama: string; umur: number; email: string }
type UserKeys = keyof User  // "nama" | "umur" | "email"

Indexed Access Types — mengakses type dari property tertentu:

type NamaType = User["nama"]     // string
type UmurType = User["umur"]     // number

Pattern berguna — generic getter yang type-safe:

function getProperty<T, K extends keyof T>(obj: T, key: K): T[K] {
  return obj[key]
}
const user = { nama: "Budi", umur: 17 }
getProperty(user, "nama")  // type: string ✅
getProperty(user, "foo")   // Error! ❌

Yang akan kamu pelajari