开发者问题收集

无法在 TypeScript 中设置接口类型的属性

2019-03-20
1450

我是 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));
3个回答

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

 this.adds = //initialize with a value before using it in the next line.
 this.adds.num1=12;
Fullstack Guy
2019-03-20

不清楚 Calculator 中的 adds 是什么意思,但您的代码中没有任何内容 创建 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;
    }
}
T.J. Crowder
2019-03-20

不确定您想要实现什么,但我认为正确的设计应该是:

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));
ttulka
2019-03-20