Bir index signature, adlarını önceden bilmediğiniz özeliklerin türünü tanımlar — dinamik anahtarları olan sözlükleri/haritaları modellersiniz.
{
[: ]: ;
}
: = { : , : };
scores. = ;
scores.;
scores.;
Bir index signature, adlarını önceden bilmediğiniz özeliklerin türünü tanımlar — dinamik anahtarları olan sözlükleri/haritaları modellersiniz.
{
[: ]: ;
}
: = { : , : };
scores. = ;
scores.;
scores.;
Sade bir index signature ile, derleyici her anahtarın var olduğunu varsayar, bu nedenle scores.typo, çalışma zamanında aslında undefined olsa bile number olarak yazılır. noUncheckedIndexedAccess etkinleştirmek bunu düzeltir:
// 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
}
Tüm adlandırılmış özellikler, index signature'ın değer türüne atanabilir olmalıdır.
type Scores = Record<string, number>; // same as the index signature
type Roles = Record<"admin" | "user", boolean>; // constrained keys
Record, sözcüksel kısa yazı olup kısıtlı anahtar birleşimini destekler; sade [key: string] bunu yapamaz.
Index signature'lar gerçek anlamda dinamik anahtarlı nesneleri (arama tabloları, önbellekler, ayrıştırılan JSON haritaları) modellersiniz.
Güvenlik uyarısını (noUncheckedIndexedAccess) bilin ve okunabilirlik için Record<K, V> tercih edin — anahtarlar gerçek anlamda açık olduğunda ve gerçek yineleme/boyut anlamsal özelliklerini istediğinizde Map tercih edin.