具有工厂功能的Typescript泛型

时间:2018-04-05 10:00:21

标签: typescript

我有一个类,我想用工厂类扩展,它将根据输入返回正确的类。

class Base<S> {
  prop: S;
  base() { }
}

class A<S> extends Base<S> {
  a() { }
}

class B<S> extends Base<S> {
  b() { }
}


interface TypeA {
  propA: any;
}

interface TypeB {}

function isTypeA(params: TypeA | TypeB): params is TypeA {
  return (params as TypeA).propA !== undefined;
}

function factory(params: TypeA): typeof A;
function factory(params: TypeB): typeof B;
function factory(params: TypeA | TypeB): typeof A | typeof B {
  if (isTypeA(params)) {
    return A;
  } else {
    return B;
  }
}

const param: TypeA = { propA: {} };
const param2: TypeB = {};

class Test extends factory(param) { }

除此之外,我需要一直传递泛型。如何将通用从工厂函数传递到Base类?

1 个答案:

答案 0 :(得分:2)

这样做:

Test

或者,如果您不希望class Test extends factory(param)<string>() 具有通用性:

// LoginController.php
public function username()
{
    return 'username';
}

// User.php
public function getAuthIdentifierName() {
    return 'username';
}