考虑 ChildClass 扩展 ParentClass 。对于这个问题,Stackblitz可用here。
ChildClass 只会添加一个公共属性(“brainPower”):
class ParentClass{
_me: string;
constructor() {
this._me = "I'm a parent";
}
whoAmI(): string {
return this._me;
}
}
class ChildClass extends ParentClass {
public readonly brainPower = 42;
constructor() {
super();
this._me = "I'm a child";
}
}
方法“ doStuff ”采用以下两种参数:
class Program {
static main() {
Program.doStuff(new ParentClass());
Program.doStuff(new ChildClass());
}
static doStuff(anInstance: ParentClass | ChildClass){
console.log('[Program] > Processing > ', anInstance.whoAmI());
if(anInstance.brainPower){
console.log('[Processing] > ', anInstance.whoAmI(), ' > I can brain as much as ', anInstance.brainPower);
}
}
}
我的问题
Typescript编译器报告:
Property 'brainPower' does not exist on type 'ParentClass | ChildClass'.
问题是如何为参数设置多种可能的类型,并希望打字稿能够理解它,以便只接受其中一种类型已知的属性?
答案 0 :(得分:2)
您可以将函数的参数设置为接受ParentClass
的任何实例。
您可以检查给定对象是ChildClass
的实例
if (anInstance instanceof ChildClass) ...
ts编译器会将该对象推断为if范围内的ChildClass实例。