Generics 传递枚举的TypeScript泛型
第一个帖子请善待。。。我最近一直在修补TypesScript泛型,我试图了解泛型的工作方式(或者在我的例子中没有),我已经将坏掉的泛型和类的工作版本放在了同一个共享游乐场(),希望它能在旅途中幸存下来,否则这些都没有意义 正如您所看到的,中断版本和工作版本之间的区别在于,我只是将对枚举的引用更改为对泛型参数的引用。您会注意到,在操场的TypeScript一侧,在使用泛型参数的地方出现了三个小问题。我认为这是一个约束问题,但经过几次尝试,并通过查看生成的Javascript,我决定需要找一个论坛,向经验丰富/专业的typescript程序员提问 我该怎么做才能诱使编译器将泛型类型传递到构造函数中,就像它传递给“super”类型一样?查看输出也解释了为什么我在不同的上下文中使用(CRTP)时会遇到问题,我在这里缺少的是,不需要使用一些粗糙的手动编辑就可以做到这一点吗Generics 传递枚举的TypeScript泛型,generics,typescript,crtp,Generics,Typescript,Crtp,第一个帖子请善待。。。我最近一直在修补TypesScript泛型,我试图了解泛型的工作方式(或者在我的例子中没有),我已经将坏掉的泛型和类的工作版本放在了同一个共享游乐场(),希望它能在旅途中幸存下来,否则这些都没有意义 正如您所看到的,中断版本和工作版本之间的区别在于,我只是将对枚举的引用更改为对泛型参数的引用。您会注意到,在操场的TypeScript一侧,在使用泛型参数的地方出现了三个小问题。我认为这是一个约束问题,但经过几次尝试,并通过查看生成的Javascript,我决定需要找一个论坛,
--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