【问题标题】:typescript importing wrong angular打字稿导入错误的角度
【发布时间】:2017-05-29 20:33:05
【问题描述】:

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

   import * as angular from 'angular';

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

./app/shared/Logger.factory.ts (38,7) 中的错误:错误 TS2420:类 “记录器”错误地实现了接口“ILogService”。种类 属性“调试”不兼容。 类型 '(...argument: any[]) => void' 不可分配给类型 'ILogCall'。

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

如何避免这个问题?

编辑

下面是实现

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

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

angular.service('logger', Logger)

【问题讨论】:

  • 因为我的 ILogService 实现失败 - 哪个实现?请提供复制问题所需的所有代码。见stackoverflow.com/help/mcve这从 angular-mocks 导入 angular,而不是从 angular - 这个结论从何而来? VS Code 在类之间导航的方式只影响它的导航方式,没有其他影响。
  • 见:stackoverflow.com/q/40664298/4110233。答案就在这里

标签: angular typescript angular-mock


【解决方案1】:

试试这个..

import * as _angular_ from 'angular';

declare global {
const angular: typeof _angular_;
}

希望对你有帮助

【讨论】:

  • 如果你能解释这个答案为什么它会起作用会很有帮助
【解决方案2】:

这是因为 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}

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

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

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

    return logCall as ng.ILogCall;
}

【讨论】:

  • 所以如果我没记错的话,你建议同时实现这两个接口
  • 这是一种不错的解决方案,但有没有办法可以禁用从 angular-mocks 加载定义
猜你喜欢
  • 2018-10-18
  • 2018-09-01
  • 1970-01-01
  • 2018-05-01
  • 1970-01-01
  • 2013-08-16
  • 2021-05-03
  • 1970-01-01
  • 2017-03-11
相关资源
最近更新 更多