class Parent {
protected data: any;
get(): dataA | dataB {
return this.data;
}
}
class A extends Parent {
protected data: dataA = getDataA();
}
class B extends Parent {
protected data: dataB = getDataB();
}
让a.get()
和b.get()
返回相应的dataA
和dataB
类型,而不是当前dataA | dataB
,a
的正确方法是什么? 1}}和b
是A
和B
的实例?
答案 0 :(得分:2)
您可以使用Parent
的类型参数,允许派生类决定数据的类型:
class Parent<T> {
protected data: T;
get(): T {
return this.data;
}
}
class A extends Parent<dataA> {
protected data: dataA = getDataA();
}
class B extends Parent<dataB> {
protected data: dataB = getDataB();
}
let a = new A();
var da = a.get(); // is dataA
let b = new B();
var db = b.get();// is dataB
游乐场link
如果dataA
和dataB
具有您希望在Parent
中使用的共同成员,则可以向T
添加类型约束。这要求传递的类型参数具有特定形状,您可以使用Parent
中的成员:
class Parent<T extends { commonField: string } > { ... }