Index signature kuvaa ominaisuuksien tyypin, kun et tiedä niiden nimiä etukäteen — mallintaa sanakirjoja/karttoja, joissa avaimet ovat dynaamisia.
{
[: ]: ;
}
: = { : , : };
scores. = ;
scores.;
scores.;
Index signature kuvaa ominaisuuksien tyypin, kun et tiedä niiden nimiä etukäteen — mallintaa sanakirjoja/karttoja, joissa avaimet ovat dynaamisia.
{
[: ]: ;
}
: = { : , : };
scores. = ;
scores.;
scores.;
Tavallisella index signaturella kääntäjä olettaa, että jokainen avain on olemassa, joten scores.typo on tyypitetty numberksi vaikka se on todellisuudessa undefined ajon aikana. noUncheckedIndexedAccess käyttöönotto korjaa tämän:
// 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
}
Kaikki nimetyt ominaisuudet on voitava määrittää index signaturen arvotyyppiin.
type Scores = Record<string, number>; // same as the index signature
type Roles = Record<"admin" | "user", boolean>; // constrained keys
Record on idiomatiikka lyhennys ja tukee rajoitettua avain-unionia, jota tavallinen [key: string] ei voi.
Index signatuurit mallintavat todella dynaamisia avaimia sisältäviä objekteja (hakutaulukot, välimuistit, jäsennellyt JSON-kartat).
Tietää turvallisuuden varoitus (noUncheckedIndexedAccess) ja suosi Record<K, V> luettavuuden vuoksi — ja suosi Mapia kun avaimet ovat todella avoimia ja haluat todellista iteraation/koon semantiikkaa.