【发布时间】:2018-04-18 07:30:19
【问题描述】:
使用 Typescript 和 Visual Studio 2013
我想装饰 angularjs $exceptionHandler,但我不太确定正确的做法。我已经装饰了 $log,它工作正常。
我的配置:
MyAngularModule.config(['$provide',($provide) => {
$provide.decorator('$log', ['$delegate', function ($delegate) {
var myLog: MyLogService.LogService = new MyLogService.LogService();
return myLog;
}]);
}]);
MyLogService.ts
export = Example;
module Example {
export class LogService implements ng.ILogService{
constructor() {}
public assertEmpty = () => { };
public reset = () => { };
public info: ng.ILogCall = ...all my code...
}
}
现在当我尝试用 $exceptionHandler 做类似的事情时:
$provide.decorator('$log', ['$delegate', function ($delegate) {
var myExHandler: MyExHandler.ExHandlerService = new MyExHandler.ExHandlerService();
return myExHandler;
}]);
type文件中exceptionHandler的接口定义为:
interface IExceptionHandlerService {
(exception: Error, cause?: string): void;
}
如何编写类似于装饰日志服务的代码?
我试过了:
export = Example;
module Example {
export class ExHandlerService implements ng.IExceptionHandlerService{
constructor(anException: Error, aCause?: string) {}
}
}
Visual Studio 抱怨接口实现错误。我真的不明白什么(异常:错误,原因?:字符串):无效;意思是,它是构造函数吗? Typings 文件确实显示了一个名称,只是这个匿名方法定义。
我什至不明白我是如何在装饰调用中处理这个问题的(即错误和原因参数来自哪里以及如何保持默认实现也正常运行?)
提前致谢。
更新:
在 angular.d.ts 中考虑:
interface IExceptionHandlerService {
(exception: Error, cause?: string): void;
}
我想我的根本困惑是如何在 Typescript 中实现这个接口??
好的,我发现在这种情况下接口可以定义一个函数类型。这与我通常查看界面的方式产生了混淆。在这种情况下,我似乎不能使用“工具”?
【问题讨论】:
标签: angularjs visual-studio-2013 typescript