打字稿导入错误的角

时间:2017-01-14 16:07:12

标签: angular typescript angular-mock

我使用下面的语法

在我的角度1应用程序(在打字稿中)导入角度
   import * as angular from 'angular';

这导致angular-mocks而不是angular的角度导致我的ILogService实现失败

  错误在./app/shared/Logger.factory.ts(38,7):错误TS2420:类   '记录器'错误地实现了界面' ILogService'。种类   property' debug'是不相容的。       输入'(...参数:any [])=>空隙'不能分配给#og; ILogCall'。

即使我尝试从'angular'导航到vscode,我也会导航到角度模拟角度定义。它应该导航到角度而不是模拟库......

如何避免这个问题?

修改

以下是

的实施

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

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

angular.service('logger', Logger)

2 个答案:

答案 0 :(得分:1)

试试这个..

import * as _angular_ from 'angular';

declare global {
const angular: typeof _angular_;
}

希望它能帮到你

答案 1 :(得分:1)

这是因为角度模拟的打字是对角度的增强。换句话说,真正的ILogCall接口应该是:

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

所以在你的代码中:

info(message:string) { //some custom logic in info method}

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

我的解决方案是在info(消息:字符串)中:

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

    return logCall as ng.ILogCall;
}