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 = #