Index signature mendeskripsikan tipe properti ketika Anda tidak tahu namanya sebelumnya — memodelkan dictionaries/maps di mana kunci bersifat dinamis.
{
[: ]: ;
}
: = { : , : };
scores. = ;
scores.;
scores.;
Index signature mendeskripsikan tipe properti ketika Anda tidak tahu namanya sebelumnya — memodelkan dictionaries/maps di mana kunci bersifat dinamis.
{
[: ]: ;
}
: = { : , : };
scores. = ;
scores.;
scores.;
Dengan index signature biasa, compiler mengasumsikan setiap kunci ada, jadi scores.typo diketik sebagai number bahkan jika sebenarnya undefined saat runtime. Mengaktifkan noUncheckedIndexedAccess memperbaikinya:
// with noUncheckedIndexedAccess: true
scores.math; // number | undefined → forces you to handle the missing case
interface Config {
name: string; // known property
[key: string]: string | number; // plus arbitrary extra keys
}
Semua named properties harus dapat diberikan ke tipe nilai index signature.
type Scores = Record<string, number>; // same as the index signature
type Roles = Record<"admin" | "user", boolean>; // constrained keys
Record adalah shorthand idiomatik dan mendukung restricted key union, yang tidak bisa dilakukan bare [key: string].
Index signatures memodelkan objek dengan kunci yang benar-benar dinamis (lookup tables, caches, parsed JSON maps).
Ketahui caveat keamanan (noUncheckedIndexedAccess) dan lebih suka Record<K, V> untuk readability — dan lebih suka Map ketika kunci benar-benar open-ended dan Anda menginginkan semantik iterasi/size yang sebenarnya.