Je suis un débutant en programmation dactylographié et je ne suis pas en mesure de définir le type d'interface de propriété, alors veuillez me guider à ce sujet.
interface addition { num1: number; num2: number; add(num1:number, num2:number): number; } class Calculator implements addition{ num1: number; num2: number; adds: addition; // add(num1: number, num2: number): number { return num1 + num2; } sub(num1: number, num2: number): number { let sk: addition = new Calculator() console.log(sk.add(2, 3)); this.adds.num1=12; // showing error here Uncaught TypeError: Cannot set property 'num1' of undefined console.log(this.adds.num1) return num1-num2 } } let cal = new Calculator(); console.log(cal.sub(2, 3));
3 Réponses :
Ce que le FWIW: Le code de Sans ces propriétés, ce serait plutôt plus simple: ajoute
dans Calculatrice
n'est pas clair, mais rien dans votre code ne crée un ajout code> et l'assigne à
ajoute
, donc ajoute
est non défini
, et vous ne pouvez pas accéder aux propriétés sur undefined code >. Le simple fait de déclarer la propriété ne la crée pas. Vous devez en créer un ou en recevoir un. (Mais je suppose que vous ne voulez pas du tout
ajoute
.)
Calculator
semble étrange. Il déclare des propriétés qu'il n'utilise jamais (et dont il n'a pas besoin, à partir de l'API apparente qu'il fournit). À quoi servent les propriétés ajoute
, num1
et num2
? Vous acceptez les nombres comme paramètres pour ajouter
et sous
, et Calculator
lui-même est l'objet addition
. interface Addition {
add(num1:number, num2:number): number;
}
class Calculator implements addition {
add(num1: number, num2: number): number {
return num1 + num2;
}
sub(num1: number, num2: number): number {
return num1 - num2;
}
}
Vous n'avez pas initialisé le champ ajoute
dans la déclaration. Donc avant de l'utiliser la méthode sub
vous devez l'initialiser:
this.adds = //initialize with a value before using it in the next line. this.adds.num1=12;
Je ne sais pas ce que vous essayez d’obtenir, mais je pense qu’une conception appropriée serait:
interface Addition { add(num1: number, num2: number): number; } interface Subtraction { sub(num1: number, num2: number): number; } class Calculator implements Addition, Subtraction { add(num1: number, num2: number): number { return num1 + num2; } sub(num1: number, num2: number): number { return num1 - num2 } } let cal = new Calculator(); console.log(cal.add(1, 2)); console.log(cal.sub(2, 3));
Ils pourraient chercher à concevoir des fonctionnalités d'historique. La conception aurait évidemment besoin de quelques ajouts.
Essayez d'activer
--strict
pour une meilleure détection des erreurs dans TypeScript. Plus précisément, vous voulez--strictPropertyInitialization < / code>
qui vous avertira que vous n'avez pas initialiséajoute
.La convention écrasante de TypeScript (héritée de JavaScript) est que les interfaces commencent par une majuscule. Donc,
Addition
plutôt queaddition
. Vous pouvez évidemment utiliser tout ce que vous voulez dans votre propre code, mais lorsque vous demandez de l'aide, l'utilisation des conventions standard permet aux gens de vous aider plus facilement.Le code dans
Calculatrice
semble étrange. Il déclare des propriétés qu'il n'utilise jamais (et dont il n'a pas besoin, à partir de l'API apparente qu'il fournit). À quoi servent les propriétésajoute
,num1
etnum2
? Vous acceptez les nombres comme paramètres pourajouter
etsous
, etCalculator
lui-même est l'objetaddition
.