打字稿导入错误 angular

typescript importing wrong angular

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

   import * as angular from 'angular';

这从 angular-mocks 而不是从 angular 导入 angular,因此我的 ILogService 实现失败了

ERROR in ./app/shared/Logger.factory.ts (38,7): error TS2420: Class 'Logger' incorrectly implements interface 'ILogService'. Types of property 'debug' are incompatible. Type '(...argument: any[]) => void' is not assignable to type 'ILogCall'.

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

如何避免这个问题?

编辑

下面是

的实现

我的实现是自定义服务,编译时打字稿报错(错误贴在上面)

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

angular.service('logger', Logger)

试试这个..

import * as _angular_ from 'angular';

declare global {
const angular: typeof _angular_;
}

希望对您有所帮助

这是因为 angular-mock 的输入是对 angular 的增强。也就是说,一个真正的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}

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

我的解决方案在 info(message:string):

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

    return logCall as ng.ILogCall;
}