javascript - Metode format innen Angular2 modellklasse


Jeg har en grunnleggende modellklasse (ikke en komponent):

export class catModel { 
 constructor(public name: string) { }
 getName: string {
  return this.name.toUpperCase();
 }
}

Nå skal jeg prøve å bruke denne modellen i en komponent som dette:

feline: catModel = {name: 'simba' };

...når jeg kompilerer får jeg følgende feil:

Type '{ name: string }' kan ikke tilordnes til typen 'catModel'. Egenskapen 'getName' mangler i typen '{ name: string }'

Så snart jeg fjerner getName-funksjonen fra catModel, fungerer det fint. Hvorfor lar det meg ikke legge til en metode?

Svar #1

Det er fordi Typescript bruker et strukturelt typesystem. Som angitt i TypeScript-dokumentasjonen: Typekompatibilitet

Den grunnleggende regelen for TypeScripts strukturelle typesystem er at x er kompatibel med y hvis y har minst de samme medlemmene som x

«samme medlemmer» betyr egenskaper og metoder. Hvis du tenker på denne resonnementet, gir det perfekt mening. Ved å type noe som CarModel, gir du en garanti til alle som bruker det om at det vil oppføre seg som en CarModel. Hvis du ikke har en getName i objektlitteralen din, så kan det ikke være en CarModel, siden det ikke følger kontrakten.

Les den andre lenken ovenfor. Det er et flott referansedokument.

Antagelig ikke hva hovedbekymringen i innlegget ditt handler om, men den åpenbare løsningen er rett og slett å konstruere en instans av klassen new CarModel('simba').

Svar #2

Dette bør løse problemet ditt,

export class catModel { 

  name:string;    //<-----here

  constructor(public name: string) { }

  getName: string {
    return this.name.toUpperCase();
  }

}

Relaterte artikler