Compilatorul TypeScript raportează în mod eronat că 'condiția va returna întotdeauna adevărat' atunci când un accesoriu este folosit în condiție


Am experimentat cu accesori getter/setter în TypeScript când am descoperit ceea ce mi se pare o eroare a compilatorului TypeScript. Se pare că compilatorul nu tratează accesori ca apeluri de metodă atunci când evaluează condiții static. Rezultatul este că se plânge despre condiția care este întotdeauna adevărată, când în mod clar nu va fi întotdeauna adevărată.

Codul următor demonstrează problema:

class BuggyCompiler {
    text: string = 'The fox jumps over the lazy dog';
    private position: number = 0;

    private get current(): string {
        return this.text[this.position];
    }

    test(): void {
        if ('[' !== this.current)
            return;
        ++this.position;

        // This condition will always return 'true' since the types
        // '"]"' and '"["' have no overlap.(2367)
        //  ~~~~~~~~~~~~~~~~~~~~~
        if (']' !== this.current)
            console.log(`this.current: ${this.current}`);
    }
}

Am întâlnit pentru prima dată această eroare în timp ce lucram la o extensie VS-Code (raportată de VS-Code în timpul editării extensiei VS-Code). Se pare că pot executa codul în „playground” chiar dacă eroarea este raportată, dar VS-Code refuză să execute.

Faptul că pot executa codul în 'playground' mă face să mă întreb dacă eroarea este raportată de compilatorul TypeScript sau de un alt instrument.

De asemenea, rețineți că înlocuirea condiției:

        if (']' !== this.current)
            console.log(`this.current: ${this.current}`);

cu :

    let ch = this.current;
    if (']' !== ch)
        console.log(`this.current: ${this.current}`);

elimină eroarea.

Ce ar trebui să fac pentru a evita ca acest tip de eroare să fie raportat? Este o eroare a compilatorului TypeScript?

Nu sunt expert în TypeScript, așa că înainte de a raporta o problemă proiectului TypeScript aș dori confirmarea că acesta este un bug real al compilatorului.