所以我正在编写一个带有子模块的模块。符号:
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)
一样投射,但没有运气。
有什么想法吗?
答案 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应始终如此,因此它只是您学会调整的内容之一)