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
xer kompatibel medyhvisyhar minst de samme medlemmene somx
«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();
}
}
