我有一个继承了typecript类A的打字稿类B.
A类有一个名为Model的KnockoutObservable。
A类有一个名为GetSomeNumber()
的函数,它返回一个数字
export class A{
Model: KnockoutObservable<C>;
constructor(){ this.Model = ko.observable(new C()); }
GetSomeNumber (): number { return 1; }
}
B类扩展了A类并覆盖了函数GetSomeNumber()
。
export class B extends A{
GetSomeNumber(): number { return 2; }
}
在Knockout绑定中,我在类B的实例上绑定到Model的元素上引用$parent.GetSomeNumber()
。
虽然我收到以下错误...
无法获得财产&#39; GetSomeNumber&#39;未定义或空引用
但是,如果我从B类中删除覆盖,它确实有效。
答案 0 :(得分:1)
可能B类未初始化。确保 class B
之后包含class A
,例如检查脚本标记中的顺序,或者使用--out
检查reference.ts
答案 1 :(得分:0)
B类的GetSomeNumber函数实际上是在一个B类成员上调用GetSomeNumber。此时,成员属性尚未初始化。我的B级更像是这样......
export class B extends A{
somethingElse: C
constructor(something: C){
this.somethingElse = something;
}
GetSomeNumber(): number { return this.somethingElse.GetSomeNumber(); }
}
要解决这个问题,我现在检查是否已初始化了某些内容......
export class B extends A{
somethingElse: C
constructor(something: C){
this.somethingElse = something;
}
GetSomeNumber(): number {
if(this.somethingElse)
return this.somethingElse.GetSomeNumber();
else
return 0;
}
}
混淆的原因是C类的函数与B类的函数同名,所以我误解了错误信息。