не может установить свойство типа интерфейса в машинописи - PullRequest
1 голос
/ 20 марта 2019

Я новичок в программировании машинописи и не могу установить тип интерфейса свойства, поэтому, пожалуйста, сообщите мне об этом.

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 ]

2 голосов
/ 20 марта 2019

Вы не инициализировали поле adds в объявлении. Поэтому перед использованием метода sub вам необходимо его инициализировать:

 this.adds = //initialize with a value before using it in the next line.
 this.adds.num1=12;
1 голос
/ 20 марта 2019

Не уверен, что вы пытаетесь достичь, но я думаю, что правильный дизайн будет:

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 голос
/ 20 марта 2019

Непонятно, что означает adds в Calculator, но ничто в вашем коде не создает addition объект и присваивает его adds, поэтому addsundefined, и вы не можете получить доступ к свойствам undefined.Просто объявление свойства для него не создает его.Вы должны создать или получить один.(Но я подозреваю, что вы вообще не хотите adds.)


FWIW:

Код в Calculator кажется странным.Он объявляет свойства, которые он никогда не использует (и не нуждается, из очевидного API, который он предоставляет).Для чего нужны свойства adds, num1 и num2?Вы принимаете числа в качестве параметров для add и sub, а Calculator сам по себе является 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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...