San*_*ord 4 generics interface typescript
我在使用对象文字时使用泛型来帮助简化界面构建过程。因此,例如,我的所有使用字符串作为键的对象的基本接口是
interface IStringTMap<T> { [s: string]: T; };
Run Code Online (Sandbox Code Playgroud)
如果我想用它来强制对象完全由函数组成,我会创建一个新接口
interface IStringFunctionMap extends IStringTMap<Function> { };
Run Code Online (Sandbox Code Playgroud)
然而,有时我想使用更复杂的对象。例如,假设我想构建以下结构:
var obj = {
"group_1" : {
"func_1" : function() {},
"func_2" : function() {}
},
"group_2" : {
"func_1" : function() {},
"func_2" : function() {}
}
}
Run Code Online (Sandbox Code Playgroud)
我可以很容易地从原始位构建这个界面
interface IFunctionGroups { [s: string]: { [s: string]: Function } };
Run Code Online (Sandbox Code Playgroud)
我将如何使用现有的界面使其更具可读性IStringTMap?
我尝试过使用我的穴居人逻辑,但只是将一个界面推入另一个界面
interface IFunctionGroups extends IStringTMap<IStringFunctionMap>;
Run Code Online (Sandbox Code Playgroud)
给我以下错误:
接口仅使用可选类型参数扩展标识符/限定名称。
在接口声明后添加花括号{ }可以纠正问题:
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() {}
}
}
Run Code Online (Sandbox Code Playgroud)
编译后不会出现错误或警告:
var obj = {
"group_1": {
"func_1": function () { },
"func_2": function () { }
},
"group_2": {
"func_1": function () { },
"func_2": function () { }
}
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9618 次 |
| 最近记录: |