typescript - Angular-klass fungerar inte


Jag försöker använda klasser i Angular för att göra mitt liv enklare men hittills fungerar det inte än. Nedan är min kod och det felmeddelande jag får:

import { WizardData } from '../models/wizard-data';

export class WizardPage {
    private type: String;
    private data: WizardData;

    public getType(){
        return this.type;
    }

    public setType(type: String){
        this.type = type;
    }

    public getData(){
        return this.data;
    }

    public setData(data: WizardData){
        this.data = data;
    }
}

och

import { Component, OnInit } from '@angular/core';
import { WizardPage } from '../../shared/models/wizard-page';

@Component({
  selector: 'app-wizard-base',
  templateUrl: './wizard-base.component.html',
  styleUrls: ['./wizard-base.component.scss']
})

export class WizardBaseComponent implements OnInit {
  wizardPage: WizardPage = new WizardPage();
  wizardPage.setType("address");

  constructor() { }

  ngOnInit() {}

}

Detta ger ett fel på raden

wizardPage.setType("address");

Nämligen (CLI):

ERROR in src/app/wizard/wizard-base/wizard-base.component.ts(14,13): error TS1005: ';' expected.
src/app/wizard/wizard-base/wizard-base.component.ts(14,22): error TS1003: Identifier expected.

Och i Visual Studio Code:

[ts] Duplicate identifier 'wizardPage'.
[ts] Subsequent property declarations must have the same type.  Property 'wizardPage' must be of type 'WizardPage', but here has type 'any'.
(property) WizardBaseComponent.wizardPage: WizardPage

Vet någon varför detta inte fungerar?

Tack!

Svar #1

Du kan deklarera medlemmar av en klass inuti en klass direkt, men du kan inte komma åt dem direkt. I princip kan du komma åt variabeln inuti vilken metod som helst i en klass, och den kommer att tillhöra this (kontext). Här bör du anropa ngOnit livscykel-hook.

ngOnInit() {
   this.wizardPage.setType("address");
}

När det gäller att specificera åtkomst för en variabel i en underordnad eller ärvd klass, kan du använda åtkomstspecifierare, som kan vara public, protected, private. Dessa åtkomstspecifierare fungerar på ett liknande sätt som de gör i OOP-språk som C#, Java, etc. Tack @Florian för tipset i kommentaren.