Generics 传递枚举的TypeScript泛型

Generics 传递枚举的TypeScript泛型,generics,typescript,crtp,Generics,Typescript,Crtp,第一个帖子请善待。。。我最近一直在修补TypesScript泛型,我试图了解泛型的工作方式(或者在我的例子中没有),我已经将坏掉的泛型和类的工作版本放在了同一个共享游乐场(),希望它能在旅途中幸存下来,否则这些都没有意义 正如您所看到的,中断版本和工作版本之间的区别在于,我只是将对枚举的引用更改为对泛型参数的引用。您会注意到,在操场的TypeScript一侧,在使用泛型参数的地方出现了三个小问题。我认为这是一个约束问题,但经过几次尝试,并通过查看生成的Javascript,我决定需要找一个论坛,

第一个帖子请善待。。。我最近一直在修补TypesScript泛型,我试图了解泛型的工作方式(或者在我的例子中没有),我已经将坏掉的泛型和类的工作版本放在了同一个共享游乐场(),希望它能在旅途中幸存下来,否则这些都没有意义

正如您所看到的,中断版本和工作版本之间的区别在于,我只是将对枚举的引用更改为对泛型参数的引用。您会注意到,在操场的TypeScript一侧,在使用泛型参数的地方出现了三个小问题。我认为这是一个约束问题,但经过几次尝试,并通过查看生成的Javascript,我决定需要找一个论坛,向经验丰富/专业的typescript程序员提问

我该怎么做才能诱使编译器将泛型类型传递到构造函数中,就像它传递给“super”类型一样?查看输出也解释了为什么我在不同的上下文中使用(CRTP)时会遇到问题,我在这里缺少的是,不需要使用一些粗糙的手动编辑就可以做到这一点吗


--BPT

这是最终工作代码

enum eMultiGroupState { UP, DOWN, OVER, OUT, TOTAL_STATES, DEFAULT = UP, FIRST = UP }
class SomeBase { constructor(arg) {} children:any[] = []; }
function Something( info, context, fn ) { fn.apply( context, info ); }

interface MultiGroupState{
        FIRST:number;
        TOTAL_STATES:number;
        DEFAULT: number;        
}

class Broken<T extends MultiGroupState> {
    currentState:number;
    lastState:number;    
    activeState:any;
    constructor(public states:T,arg) {       

        Something( true, this, function() {
            for ( var s = states.FIRST; s < states.TOTAL_STATES; s++ ) {
                var lower = states[s].toLowerCase();
                for ( var child = 0, count = this.children.length; child < count; ++child ) {
                    if ( -1 !== this.children[child].name.indexOf(lower) ) {
                        this.states[ s ] = this.children[child];
                        break;
                    }
                }
            }
            this.setState(this.states.DEFAULT );
        });
    }
    setState( state:number ) {
        if ( state === this.currentState ) return;
        this.lastState = this.currentState;
        this.currentState = state;
        this.activeState = this.states[ state ];
        for ( var i in this.states ) this.states[i].visible = (this.activeState === this.states[i]);
    }
}
enum eMultiGroupState{UP,DOWN,OVER,OUT,TOTAL_STATES,DEFAULT=UP,FIRST=UP}
类SomeBase{constructor(arg){}子类:any[]=[];}
函数某物(信息,上下文,fn){fn.apply(上下文,信息);}
接口多组状态{
第一:数字;
州总数:个;
默认值:数字;
}
断班{
当前状态:数字;
lastState:编号;
活动状态:任何;
构造函数(公共状态:T,arg){
某物(true、this、function(){
对于(var s=states.FIRST;s
注意事项:

  • 要在泛型containt
    T
    上使用一些成员,我们需要说它必须扩展一些接口。为此,我创建了
    MultiGroupState
  • 接口的成员是一个数字。因此,
    currentState
    lastState
    state
    参数必须是数字
是什么让您认为您可以“简单地将对枚举的引用更改为对泛型参数的引用”?这里的逻辑是什么?简单地说,我想替换特定类型的用法(在本例中是枚举)接口和枚举在TypeScription中是一场噩梦。我进一步探讨了泛型+枚举的问题,并找到了一种方法来引导我需要的行为。然而,关于以这种方式使用enum,仍然有一些奇怪的事情。如果有人希望看到问题,请访问