繁体   English   中英

无法在打字稿中设置接口类型的属性

[英]not able to set property of interface type in typescript

我是Typescript编程的初学者,无法设置属性接口类型,因此请为我提供指导。

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

您没有在声明中初始化adds字段。 因此,在使用方法sub之前,您需要对其进行初始化:

 this.adds = //initialize with a value before using it in the next line.
 this.adds.num1=12;

尚不清楚Calculatoradds是什么意思,但是您的代码中没有任何东西会创建一个addition对象并将其分配给adds ,因此addsundefined ,您无法访问undefined属性。 仅声明属性不会创建它。 您必须创建一个或接收一个。 (但我怀疑您根本不需要adds 。)


FWIW:

Calculator的代码似乎很奇怪。 它声明了从未使用过的属性(不需要,从提供的API中也不需要)。 addsnum1num2属性分别是什么? 您接受数字作为addsub参数,而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;
    }
}

不确定您要达到的目标,但我认为适当的设计应为:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM