generics - TypeScript 泛型传递枚举

标签 generics typescript crtp

第一篇文章请善待...我最近一直在修补 TypesScript 泛型,我试图了解泛型的工作方式(或者在我的情况下没有),我已经放置了损坏的泛型和工作在同一个共享 Playground (http://goo.gl/xGNoKy) 中的类的版本,希望它能在旅途中幸存下来,否则这些都没有意义。

如您所见,损坏版本和工作版本之间的区别在于我只是将对枚举的引用更改为对通用参数的引用。您会注意到,在 playground 的 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]);
    }
}

注意事项:

  • 要在通用约束 T 上使用一些成员,我们需要说明它必须扩展 一些接口(interface)。为此,我创建了 MultiGroupState
  • 接口(interface)的成员数。所以 currentStatelastStatestate 参数需要是数字。

关于generics - TypeScript 泛型传递枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25027656/

相关文章:

c# - 集合<T> : why does it implement both IEnumerable and IEnumerable<T>?

c++ - 带有模板模板参数的 CRTP

c# - 如何重构类似的方法以消除重复的设置和异常处理?

java - 具有可变参数类型的接口(interface)方法

javascript - Javascript中如何从三个数字中找到所需的数字?

reactjs - 为什么我会收到这个 Babel JSON 配置错误?

javascript - 如何在 Angular2 中访问来自 GET 操作的 json

c++ - 延迟成员变量类型定义,直到另一个类继承它

c++ - 模板基类中的重载运算符

java - 相同类型的通用多个参数