无法在 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
,因此
adds
是
undefined
,并且您无法访问
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;
}
}
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