Campos, construtores, parameter properties, public, protected, private e #private, readonly, abstract e implements. Teste quem consegue acessar cada membro em uma matriz interativa.
Uma classe TypeScript é uma classe JavaScript com campos tipados e regras de acesso. Membros public podem ser acessados de qualquer lugar, os protected dentro da classe e das subclasses, e os private só dentro da própria classe. Essas três verificações existem apenas em tempo de compilação. Um campo #name é privado também no JavaScript em execução, e readonly bloqueia escritas depois do construtor.
Palavras-chave de classe e o que elas fazem
Escolha um modificador e a matriz mostra cinco formas de o código chegar a esse membro, com o resultado do tsc para cada uma. A linha dos colchetes é a que surpreende: os modificadores de tempo de compilação podem ser contornados com uma chave em string, enquanto um campo # não pode.
private é uma verificação do TypeScript. Ela some da saída, e obj["secret"] ainda compila e lê o valor. Um campo #secret é um campo privado do JavaScript: nenhuma chave em string chega até ele, e código fora da classe não consegue lê-lo em tempo de execução.
Um atalho que declara e atribui um campo a partir de um parâmetro do construtor. Escrever constructor(private readonly id: string) {} cria um campo id private readonly sem precisar de corpo. O prefixo pode ser public, protected, private ou readonly.
Não. implements só verifica se a classe pronta se encaixa na interface. Os parâmetros dos métodos continuam precisando das próprias anotações; deixar uma de fora no modo strict gera um erro de any implícito, mesmo que a interface já indique o tipo.
strictPropertyInitialization, que o strict ativa, exige que todo campo declarado receba valor na declaração ou no construtor. Dê um valor a ele, torne-o opcional ou adicione ! depois do nome se outra coisa o definir antes do uso.
Use uma classe abstrata quando as subclasses devem compartilhar código de verdade, como um método que chama um hook abstrato. Uma interface não carrega código e uma classe pode implementar várias, então ela serve para descrever formatos.
O construtor declara dois campos na lista de parâmetros. O cache é um campo #, então nada fora da classe consegue lê-lo ou limpá-lo.
describe é código compartilhado; area é o hook que cada forma precisa fornecer. Com noImplicitOverride ligado, a palavra-chave override é obrigatória em area na classe Circle.
A interface garante que a classe tenha send com o formato certo, mas o parâmetro ainda precisa da própria anotação de tipo.
Sem restrições. Omitir o modificador significa a mesma coisa.
Dentro dos próprios métodos de Account
Dentro de um método de Savings
De fora, com ponto
De fora, com chave em string
De fora, atribuindo um novo valor
Aberto para a classe e as subclasses. Uma chave em string ainda passa pela verificação, porque é só uma regra de tipo.
Dentro dos próprios métodos de Account
Dentro de um método de Savings
De fora, com ponto
De fora, com chave em string
De fora, atribuindo um novo valor
Fechado até para subclasses, mas só durante a verificação de tipos. A forma com colchetes compila e o valor pode ser lido em tempo de execução.
Dentro dos próprios métodos de Account
Dentro de um método de Savings
De fora, com ponto
De fora, com chave em string
De fora, atribuindo um novo valor
Um campo privado do JavaScript. Nenhuma chave em string o nomeia, então toda rota externa falha, e o motor aplica a mesma regra em tempo de execução.
Dentro dos próprios métodos de Account
Dentro de um método de Savings
De fora, com ponto
De fora, com chave em string
De fora, atribuindo um novo valor
Qualquer um pode ler; ninguém pode atribuir depois da construção, nem mesmo os métodos da própria classe.
Dentro dos próprios métodos de Account
Dentro de um método de Savings
De fora, com ponto
De fora, com chave em string
De fora, atribuindo um novo valor
Escolha um modificador
Acesso a um membro {v}
Usado de
Código
Resultado do tsc
Compila
Comece grátis · Sem cartão de crédito