我在使用对象文字时使用泛型来帮助简化界面构建过程。因此,例如,我使用字符串作为键的所有对象的基本接口是
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>;
给我以下错误:
接口只扩展带有可选类型参数的标识符/限定名。
答案 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 () { }
}
};