Já conhece os acessores automáticos no TypeScript?

Lucas Santos - Aug 7 - - Dev Community

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!

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;
    }
}

Enter fullscreen mode Exit fullscreen mode

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.name = nome;
    }
}

Enter fullscreen mode Exit fullscreen mode

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.

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .