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
}