typescript - typa JSON-data med Record<> och kontrollera om nyckeln finns
Min backend tillhandahåller ett JSON-objekt som kartlägger id-strängar till data:
{
"asdo2q" : 253,
"s398dd" : 132,
...
}
Såvitt jag kan se, är den motsvarande Typescript-typen ett Record. Eftersom ett id kanske inte finns, använder jag:
let data: Record<string, number | undefined> = {
'asdf': 1
};
Nu behöver jag bearbeta dessa data och behöver kontrollera om en nyckel finns:
const id = 'asdf';
if (id in data) {
const id_data = data[id];
console.log(id_data + 1); // compiler says it might be undefined
}
Komplileringsstödet verkar vara mycket bättre för andra mönster. Så jag undrar: Är detta rätt sätt att typa mitt backend-svar?
Svar #1
det är förväntat eftersom id in data inte gör något med id_data=data[id]. id kan finnas i data men dess värde kan fortfarande vara undefined.
Du behöver hävda värdet självt.
const data: Record<string, number | undefined> = {
"asdo2q" : 253,
"s398dd" : 132,
}
const id = 'asdf';
const id_data = data[id];
if (id_data !== undefined) {
console.log(id_data + 1); // now it works
}
