使用隐式任意迭代模块导出

时间:2016-05-23 17:22:04

标签: angularjs typescript

所以我正在编写一个带有子模块的模块。符号:

module App.services {
    export class SomeService { }
}

我使用以下命令初始化所有服务:

function defToArray(def: any): any[] {
    return (def.dependencies || []).concat(def)
}

for (var s in App.services)
    app.service(s, defToArray(App.services[s]));

然而defToArray(App.services[s])导致"对象类型的索引签名隐含地具有' any'类型"

我已尝试像defToArray(<any>App.services[s])defToArray(App.services[s] as any)一样投射,但没有运气。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

施放不是非常紧密的绑定。

而不是

var fields = ['firstName', 'lastName', 'email'],
oldVals = ['John', 'Doe', 'doe@mail.com'],
newVals = ['Jo','Do','jo@mail.com'];


function createCustomObj(fields , oldVals, newVals){
var obj={};

    fields.forEach( function(f, i){
        obj[f]={};
    obj[f]['oldValue']= oldVals[i];
    obj[f]['newValue']= newVals[i];
});

return obj;

};

console.log(createCustomObj(fields, oldVals, newVals));

defToArray(<any>App.services[s])

或者如果您愿意

defToArray((<any>App.services)[s])

为了澄清,此处的目标不是强制转换defToArray((<{[key:string]:any}>App.services)[s]) 的类型,您实际上是在尝试为按索引访问运算符提供类型信息。启用App.services[s]时这只是一个问题(但IMO应始终如此,因此它只是您学会调整的内容之一)