有没有办法在类之间共享泛型类型变量?

时间:2016-07-13 17:42:11

标签: generics typescript

我想做这样的事情:

class B<X> {
  b_stuff: X;
  // etc...
}

// X is the same type as above
class A<X, Y> {

  a1_stuff: Y;
  a2_stuff: X;  
  // etc...
}

有没有办法在类之间共享类似这样的类型变量?我认为嵌套类是这样做的方法,但显然TypeScript不支持这个。

3 个答案:

答案 0 :(得分:1)

没有办法做到这一点;它也没有任何意义。可能有许多AB个实例,每个实例都使用不同的类型参数进行实例化。尝试从您尝试编写的代码的角度提出另一个问题来解决问题。您似乎遇到了XY问题(http://xyproblem.info/)。

答案 1 :(得分:0)

我不确定这是否对您有所帮助,但您的问题有可能通过继承来解决:

public class List<E>{
....
}
public class ArrayList<E> implements List{
}

现在当你从列表中创建一个列表和一个ArrayList时,它们需要是相同的类型。例如:

public List<String> myList = new ArrayList(true, false, true, true)

您将不被允许创建该列表,因为它们需要是相同类型或至少实现相同类型。 (我说实现相同的类型,因为如果你创建了一个列表然后你可以有一个ArrayList,一个LinkedList和一堆其他的)希望这有帮助

答案 2 :(得分:0)

以下是一个想法:您可以在A中使用工厂方法创建B的实例,并绑定到与X相同的A

class B<X> {
    b_stuff: X;
}

class A<X, Y> {
    a1_stuff: Y;
    a2_stuff: X;

    createB(...args: any[]): X {
        // create B using args
    }
}