2
votes

impossible de définir la propriété du type d'interface dans le script

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 commentaires

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 que addition . 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é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 .


3 Réponses :


2
votes

Ce que le 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 .)


FWIW:

Le code de 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 .

Sans ces propriétés, ce serait plutôt plus simple:

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;
    }
}


0 commentaires

3
votes

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;


0 commentaires

1
votes

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));


1 commentaires

Ils pourraient chercher à concevoir des fonctionnalités d'historique. La conception aurait évidemment besoin de quelques ajouts.