使用通用接口中的接口

时间:2015-11-13 16:30:24

标签: generics interface typescript

我在使用对象文字时使用泛型来帮助简化界面构建过程。因此,例如,我使用字符串作为键的所有对象的基本接口是

interface IStringTMap<T> { [s: string]: T; };

如果我想用它来强制一个对象完全由函数组成,那我就建立一个新的界面

interface IStringFunctionMap extends IStringTMap<Function> { };

然而,偶尔我想使用更复杂的对象。例如,让我们说我想构建以下结构:

var obj = {
    "group_1" : {
        "func_1" : function() {},
        "func_2" : function() {}
    },
    "group_2" : {
        "func_1" : function() {},
        "func_2" : function() {}
    }
}

我可以很容易地从原始位

构建这个接口
interface IFunctionGroups { [s: string]: { [s: string]: Function } };

如何使用现有的IStringTMap界面提高可读性?

我尝试过使用我的穴居人逻辑,但只是将一个界面推到另一个界面

interface IFunctionGroups extends IStringTMap<IStringFunctionMap>;

给我以下错误:

  

接口只扩展带有可选类型参数的标识符/限定名。

1 个答案:

答案 0 :(得分:3)

在接口声明更正问题后添加花括号{ }

interface IStringTMap<T> { [s: string]: T; }

interface IStringFunctionMap extends IStringTMap<Function> { }

interface IFunctionGroups extends IStringTMap<IStringFunctionMap> { }

var obj: IFunctionGroups = {
    "group_1" : {
        "func_1" : function() {},
        "func_2" : function() {}
    },
    "group_2" : {
        "func_1" : function() {},
        "func_2" : function() {}
    }
}

编译时没有错误或警告:

var obj = {
    "group_1": {
        "func_1": function () { },
        "func_2": function () { }
    },
    "group_2": {
        "func_1": function () { },
        "func_2": function () { }
    }
};