如何从泛型类扩展?

时间:2017-08-21 18:00:18

标签: typescript

现在我有三个课程,ABC

BA延伸。 C可能会从AB延伸。

如何编写C类代码?

是否有类似的内容:

class C extends <T>{...}

T只会是AB。在编译时决定是A还是B

2 个答案:

答案 0 :(得分:0)

  

是否有 document.getElementById('btn').addEventListener('click',function(){ var checkboxes = document.getElementsByName('checkval[]'); var input = document.getElementsByName('ocid[]'); var checkval = ''; var checkid = ''; for(var i=0;i<checkboxes.length;i++) { if(checkboxes[i].checked){ i==0 ? checkval += checkboxes[i].value : checkval += ","+checkboxes[i].value; i==0 ? checkid += input[i].value : checkid += ","+input[i].value; } } console.log(checkval+" "+checkid); });

之类的内容

不,没有。

您可以创建class C extends <T>{...}CA extends A,并在运行时选择两者

答案 1 :(得分:0)

你不能用泛型来做。您可以使用与mixin classes类似的模式执行此操作,但它涉及到相关内容,并要求您描述将C添加到AB的类A | B一个单独的接口,然后有一个函数,使用A或B作为参数构造和返回类定义。您还必须为该函数提供2个单独的重载声明,因为基本上不可能声明扩展除类之外的任何类的类 - 您不能使用联合类型class A { a: string } class B extends A { b: string } interface C_only { // decsribes what C will add to either A or B c: number; } interface C_extended_from_A { new (): C_only & A; } interface C_extended_from_B { new (): C_only & B; } function extend_A_or_B(Base: typeof B): C_extended_from_B; function extend_A_or_B(Base: typeof A): C_extended_from_A; function extend_A_or_B(Base: typeof A): typeof A { return class C extends Base implements C_only { constructor() { super(); // can access only methods from common base class A in the implementation this.c = this.a.length; } c: number; } } const CA = extend_A_or_B(A); const CB = extend_A_or_B(B); const ca = new CA(); const cb = new CB(); const a1 = ca.a; //const b1 = ca.b // error - no b here const c1 = ca.c; const a2 = cb.a; const b2 = cb.b; const c2 = cb.c;

{{1}}

不确定它是否能解决您的问题,或者是否值得拥有这样的复杂性,但现在就是这样。