我的代码如下所示:
app.factory('utilityService', [
'$http',
'$angularCacheFactory',
utilityService
]);
function utilityService(
$http,
$angularCacheFactory
) {
var factory: {
rowClicked($index, collection);
} = <any>{};
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;
}
};
return factory;
}
有没有办法可以将定义和代码结合起来,如下所示:
var factory2: {
rowClicked: ($index, collection) => { ... };
}
return factory2;
请注意,我确实尝试了上面的代码,但我认为我没有走上正确的道路,因为我看到了许多与 typescript 相关的错误。
最佳答案
您可以为您的服务定义一个接口(interface),并将其保留在您的服务外部。所以你可以将其总结为:-
export interface IUtilityService {
/**
* Returns ...
* @param {number} $index - ...
* @param {SomeType[]} collection:SomeType - ...
* @returns {SomeType}
*/
rowClicked($index:number, collection:SomeType[]):number
}
Class UtilityService implements IUtilityService {
static $inject = [
'$http',
'$angularCacheFactory'
];
constructor(private $http : ng.IHttpService,
private $angularCacheFactory :ng.ICacheFactoryService) {
}
rowClicked($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;
}
};
}
app.service('utilityService',UtilityService);
当您使用它时,您可以将依赖项的类型指定为 IUtilityService
关于javascript - 使用 Typescript 我可以以更紧凑的方式创建服务吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24961938/