typescript - Cum să accesezi tipuri de interfețe imbricate
Am o interfață care are o a doua interfață ca valoare, așa cum se arată mai jos. Dar când încerc să accesez valorile imbricate, primesc o eroare. Care este modul corect de a accesa valorile interfeței imbricate?
interface Results {
pass: number;
fail: number;
}
interface Build {
name: string;
results: Results;
}
var obj: Build = {
name: "test",
results: {
pass: 3,
fail: 2
}
}
În prezent, încerc să accesez astfel, fără succes:
obj.results.pass
Eroarea pe care o primesc: ERROR TypeError: Nu se poate seta proprietatea 'pass' a unui obiect nedefinit
Răspuns #1
Eroarea pe care o aveți este o eroare de rulare (motor de execuție JavaScript), nu una de compilare (compiler TypeScript).
Acest lucru apare deoarece aveți obj.results egal cu undefined:
const test: Build = {};
test.results.pass; // ERROR TypeError: Cannot set property 'pass' of undefined
Aș recomanda să verificați valoarea proprietății results înainte de a accesa proprietatea sa copil:
if (test.results) {
test.results.pass;
}
Răspunsul #2
Pentru cei care se uită la asta mai târziu, a trebuit să creez un obiect Result în interiorul lui obj, cum ar fi:
this.build["results"] = { pass: 0, fail: 0};
Atunci a putut să acceseze și să schimbe pass și fail accesându-le astfel:
this.build["results"].pass = #
this.build["results"].fail = #
