O TypeScript tem várias funcionalidades super interessantes que poucas pessoas conhecem, uma dessas funcionalidades é o uso de auto-accessors em classes.

Presente desde o TypeScript 4.9, ela também é uma funcionalidade que está descrita na proposta original de decorators (que inclusive a gente já falou sobre aqui).

Vem aprender comigo!

Quer aprender mais sobre criptografia e boas práticas com #TypeScript?

Se inscreva na Formação TS!

Essencialmente, essa sintaxe funciona da seguinte maneira, quando temos um acessor, geralmente temos um método get que traz uma variável interna de uma classe, por exemplo:

class Pessoa {
    #__nome: string;

    get name() {
        return this.#__nome;
    }
    set name(val: string) {
        this.#__nome = val;
    }

    constructor(nome: string) {
        this.nome = nome;
    }
}

Percebe que a gente tem não uma, mas 7 linhas só para poder criar um acessor que vai setar e obter a variável interna #__nome? Seria muito melhor se a gente pudesse fazer tudo isso de uma vez, e é pra isso que os auto-accessors existem. Tudo isso que eu escrevi pode virar isso aqui:

class Person {
    accessor nome: string;

    constructor(nome: string) {
        this.nome = nome;
    }
}

Por baixo dos panos, o que os acessores automáticos vão fazer é exatamente o que fizemos no primeiro código, eles vão expandir o nome para uma variável privada interna da classe, e uma variável externa acessível somente por um getter e um setter.

No geral, essa feature não é algo muito relacionado à lógica, mas sim a qualidade de vida, especialmente quando vamos criar decorators que precisam de vários getters e setters.