我有这项服务:
app.factory('utilityService', [
'$http',
'$angularCacheFactory',
utilityService
]);
function utilityService(
$http,
$angularCacheFactory
) {
var factory = {};
factory.rowClicked = function ($index, collection) {
var row = collection[$index];
if (row.current) {
row.current = false;
return null;
} else {
collection.forEach(function (object) {
object.current = false;
});
row.current = true;
return $index;
}
};
factory.isArrayAndNotEmpty = function (theArray) {
var rc = typeof theArray !== 'undefined' && theArray.length > 0;
return rc;
};
return factory;
}
在打到rowClicked之前,
factory.rowClicked
The property rowClicked does not exist on value of type '{}'
答案 0 :(得分:2)
var factory = {};
TypeScript从其初始化程序中推断出factory
的类型。在这里,您已经说factory
没有成员,因此任何在其上读取或写入属性的尝试都将失败。
您只需将factory
的类型更改为any
:
var factory: any = {};
这将使读取或写入factory
的任何属性成为有效,但这可能过于宽松。你也可以写出它的类型:
var factory: {
rowClicked($index, collection);
} = <any>{};
如果您有$index
和collection
的类型,则可以进一步改进类型:
var factory: {
rowClicked($index: MyIndexService, collection: MyRowCollectionType);
} = <any>{};
答案 1 :(得分:0)
您可以将TypeScript类用于服务,无需TypeAssertions(或手动接口)即可获得更大的TypeSafety。
您需要使用angular.service
代替angular.factory
。参考:https://www.youtube.com/watch?v=Yis8m3BdnEM&hd=1