打字稿导入错误的角度

hr-*_*tis 6 typescript angular-mock angular

我使用如下语法在我的角度1应用程序(在打字稿中)导入角度

   import * as angular from 'angular';
Run Code Online (Sandbox Code Playgroud)

这导入了角度,angular-mocks而不是来自angular我的ILogService实现失败的角度

./app/shared/Logger.factory.ts(38,7)中的错误:错误TS2420:类'Logger'错误地实现了接口'ILogService'.属性"debug"的类型不兼容.类型'(... argument:any [])=> void'不能分配给'ILogCall'类型.

甚至当我尝试导航到'angular'vscode我得到导航到角嘲笑的角度定义.它应该导航到角度而不是模拟库......

如何避免这个问题?

编辑

以下是实施

我的实现是自定义服务,关于哪些打字稿在编译期间出错(错误被粘贴在上面)

class Logger implements ng.ILogService {
     info(message:string) { //some custom logic in info method}
}

angular.service('logger', Logger)
Run Code Online (Sandbox Code Playgroud)

小智 1

这是因为 Angular-Mock 的类型是对 Angular 类型的增强。换句话说,一个真正的ILogCall接口应该是:

interface ILogCall {
    (...args: any[]): void;   //from @types\angular\index.d.ts
    logs: string[];    //from @types\angular-mocks\index.d.ts
}
Run Code Online (Sandbox Code Playgroud)

所以在你的代码中:

info(message:string) { //some custom logic in info method}
Run Code Online (Sandbox Code Playgroud)

您需要返回一个正确的 ILogCall 对象(包含所有成员)。@TheChetan 和 @Natarajan Nagarajugari 的答案可能会有所帮助,但我不确定它是否会破坏您的 TypeScript 编写单元测试。

我的解决方案是信息(消息:字符串):

info(message:string)
{
    var logCall: any = (...args: any[]) => {};
    logCall.logs = //something;

    return logCall as ng.ILogCall;
}
Run Code Online (Sandbox Code Playgroud)