[ajuda]'class' 'typescript' erro 'declarar objeto'

Boa noite, só pra eu entender… Quando cria class, pede pra declarar objeto.
O professor colocou como public ‘nome_do_objeto’, eu usei a sugestão do Vs Code e deu certo tbm…
Queria entender a diferença e o porquê.
*Comentei pra aparecer o erro, e a forma comentada é a que acontece depois de clicar na ‘lampada’
Obrigada!

2 Likes

Pelo que entendi, vc tem que primeiro declarar a propriedade como public/private/undefined antes dela ser usada no Constructor(). Sem isso, o TypeScript nao consegue definir que tipo de propriedade ela eh.

Pelo que pesquisei agora, eu vi que vc tem a opcao de declarar ou nao o Constructor na classe. Por isso que vc consegue declarar ela como “filhos:number” porque ela independe do constructor. No entanto, vale lembrar que vc esta usando extends com a classe Player. Pode ser que ocorra algum tipo de problema no futuro.

Pesquisando novamente, vi que vc tbm tem a opcao de declarar ou nao que tipo de propriedade uma classe pode ter.

Por exemplo:

filhos:number 

Eh equivalente a:

public filhos:number 

Por debaixo dos panos, public eh inserido automaticamente se n houver tipo de propriedade.

2 Likes

Você pode deixar public, private ou protected, cada um tem sua função:

Public: Pode ser acessado por qualquer um que possuir uma instancia da sua classe.

Private: Somente pode ser acessado de dentro da sua classe (usado para utilizar get e set).

Protected: Pode ser acessado pela própria classe e filhos da mesma.

Quando você não declara nada, o TS coloca algum automaticamente pra você, eu creio que seja o Public, mas ai é só passar o mouse por cima q ele mostra.

2 Likes

Oi @Ari, até onde entendo o objeto pode ou não ter atributos.
O mais comum é que tenha e neste caso, o mais usual é que sua visibilidade seja definida como private ou protected conforme as demais respostas informaram. Já public não é o mais usual para seguir o princípio do encapsulamento evitando que seu valor seja alterado diretamente por outra entidade.
É mais controlado se o valor for alterado por meio dos setters e recuperado pelos getters, que são os nomes genéricos dados às funções com essas finalidades.
Com relação ao construtor, é opcional. Se decidir criá-lo para inicializar os atributos do seu objeto, então precisará usar a palavra reservada ‘this.’ antes do nome do atributo.
Fiz esse código de exemplo para validar as afirmações acima:

class ConstructorDefault {
    public attribute01: string = "";
}

let constructorDefault: ConstructorDefault = new ConstructorDefault();
constructorDefault.attribute01 = "Value";

class ConstructorExplicity {
    public attribute01: string = "";

    public constructor() {
        this.attribute01 = "";
    }
}

let constructorExplicity: ConstructorExplicity = new ConstructorExplicity();
constructorExplicity.attribute01 = "Value";
2 Likes