常用功能不同的返回类型

时间:2018-05-14 10:48:44

标签: typescript

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()返回相应的dataAdataB类型,而不是当前dataA | dataBa的正确方法是什么? 1}}和bAB的实例?

1 个答案:

答案 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

如果dataAdataB具有您希望在Parent中使用的共同成员,则可以向T添加类型约束。这要求传递的类型参数具有特定形状,您可以使用Parent中的成员:

class Parent<T extends { commonField: string } > { ... }